sequelize-file

0.3.0 • Public • Published

Sequelize File

Travis npm

This package allows you to attach files to your sequelize instances as easy as you set your plain attributes and define MIME type validation and post-processing rules next to your models.

Requirements

Usage

First, you define which fileds you want to enhance with attachments logic:

/* models/attachments.js */
 
import SequelizeFile from 'sequelize-file';
 
export const picture = SequelizeFile({
   attribute: 'picture',
   mimetype: /^image/,
   crop: true,
   sizes: {
     small: 64, //width 64
     big: 150, //width 150
   }
});
 
export const backgroundImage = SequelizeFile({
  attribute: 'backgroundImage',
  mimetype: /^image/,
  crop: true,
  sizes: {
    preview: "x350" // height 350
  }
});
 

Then, you attach enhanced attributes to your model:

/* models/User.js */
 
import sequelize from './db';
import { STRING } from 'sequelize';
import { picture, backgroundImage } from './attachments';
 
let User = sequelize.define('user', {
  name: STRING,
  /* And all of your plain sequelize attributes... */
});
 
picture.addTo(User);
backgroundImage.addTo(User);
 
export default User;
 

After this, you'll be able to set files just as ordinary sequelize attributes. You can attach files either as urls (they will be downloaded), or as pre-downloaded multer-style objects (basically, only path and mimetype props are required)

 
sequelize.sync({ force: true }).then(() => {
 
  // If you set url, file will be downloaded and saved
  let user1 = User.build({
    picture: "http://example.com/somepic.jpg"
  });
 
  user1.save();
 
  // Or you can pass multer-style File object, for example
  let user2 = User.build({
    picture: "http://example.com/somepic2.jpg",
    backgroundImage: {
      path: '/uploads/tmp/somepic.jpg',
      mimetype: 'image/jpeg'
    }
  });
 
  user2.save()
 
  // Deleting file(s)
  user2.update({ picture: null });
 
});
 

You access all of your resized images through dot notation. If you didn't setup resizing, you'll get a string path to attached file.

 
User.findById(1)
.then(user => {
  console.log(user.picture.small);
  console.log(user.picture.big);
  console.log(user.picture.original);
});
 

Status

This package is under early development. Do use it with caution! Check out tests to see what is currently working.

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.3.0
    19
    • latest

Version History

Package Sidebar

Install

npm i sequelize-file

Weekly Downloads

16

Version

0.3.0

License

ISC

Last publish

Collaborators

  • khrykin