mongoose-file-attachment
v1.2.7
Published
File System persistence layer for Mongoose
Downloads
18
Readme
mongoose-file-attachment
File System persistence layer for Mongoose
Install
This project requires mongoose >= 5.12.12
and formidable >= ^1.2.2
. Install them using yarn
or npm.
$ npm install mongoose-file-attachment
or with yarn
$ yarn add mongoose-file-attachment
Examples
with express.js + formidable
import express from 'express'
import formidable from 'formidable'
import mongoose from 'mongoose'
import AttachmentPlugin from 'mongoose-file-attachment' // ALWAYS after mongoose
mongoose.Schema.Types.Attachment = AttachmentPlugin.Attachment
mongoose.plugin(AttachmentPlugin)
const schema = new mongoose.Schema({
title: String,
file: {
type: AttachmentPlugin.Attachment,
options: {
storageBasePath: 'example-storage',
baseUrl: 'http://localhost:3000/files',
serviceName: 'examples'
}
}
})
const Example = new mongoose.model('example', schema, 'examples')
const app = express();
app.get('/', (req, res) => {
res.send(`
<h2>With <code>"express"</code> npm package</h2>
<form action="/api/upload" enctype="multipart/form-data" method="post">
<div>Text field title: <input type="text" name="title" /></div>
<div>File: <input type="file" name="someFile" /></div>
<input type="submit" value="Upload" />
</form>
`);
});
app.post('/api/upload', (req, res, next) => {
const form = formidable({ multiples: true });
form.parse(req, (err, fields, files) => {
if (err) return next(err)
Example.create({
title: fields.title,
file: new AttachmentPlugin.FileAttachment(file.someFile)
}, (err, obj) => {
if (err) return next(err)
res.json(obj);
})
});
});
app.listen(3000, () => {
console.log('Server listening on http://localhost:3000 ...');
});
API
AttachmentPlugin
The plugin to be added on mongoose. It must be used on init of the application, and together to Attachment.
import mongoose from 'mongoose'
import AttachmentPlugin from 'mongoose-file-attachment'
mongoose.plugin(AttachmentPlugin)
Attachment
The type of Mongoose document properties. It must be used on init of the application, and together to AttachmentPlugin.
import mongoose from 'mongoose'
import { Attachment } from 'mongoose-file-attachment'
mongoose.Schema.Types.Attachment = Attachment
The Schema definition must have the property options
, when type is Attachment
.
options
All these properties are required.
options.storageBasePath
{string} - The path where the files will be stored.options.baseUrl
{string} - The application base URL to retrieve the file.options.serviceName
{string} - The collection name.
import { Schema } from 'mongoose'
import { Attachment } from 'mongoose-file-attachment'
const schema = new Schema({
title: {
type: String
},
firstFile: {
type: Schema.Types.Attachment, // <-- this way
options: {
storageBasePath: '/path/to/storage',
baseUrl: 'http://my-app.com/files',
serviceName: 'examples'
}
},
secondFile: {
type: Attachment, // <-- or this way
options: {
storageBasePath: '/path/to/storage',
baseUrl: 'http://my-app.com/files',
serviceName: 'examples'
}
}
})
FileAttachment
The class that must be passed on object creation.
import { FileAttachment } from 'mongoose-file-attachment'
const attachment = new FileAttachment(file)
file
Can be a formidable.File
object or an object whith these options:
file.path
{string} - The path to the file.file.size
{number} - defaultsundefined
; The file size in bytes.file.type
{number} - defaultsundefined
; The file MIME type.file.name
{string} - defaultsNO_NAME
; The original file name.
License
mongoose-file-attachment is licensed under the MIT License.