1.2.7 • Published 3 years ago

mongoose-file-attachment v1.2.7

Weekly downloads
-
License
MIT
Repository
-
Last release
3 years ago

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} - defaults undefined; The file size in bytes.
  • file.type {number} - defaults undefined; The file MIME type.
  • file.name {string} - defaults NO_NAME; The original file name.

License

mongoose-file-attachment is licensed under the MIT License.

1.2.7

3 years ago

1.2.6

3 years ago

1.2.5

3 years ago

1.2.4

3 years ago

1.2.3

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.19

3 years ago

1.1.20

3 years ago

1.1.18

3 years ago

1.1.12

3 years ago

1.1.11

3 years ago

1.1.15

3 years ago

1.1.9

3 years ago

1.1.10

3 years ago

1.1.8

3 years ago

1.1.7

3 years ago

1.1.6

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago