sequelize-file
v0.3.0
Published
File attachments logic and image post-processing for sequelize
Downloads
39
Maintainers
Readme
Sequelize File
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
- ImageMagick (
brew install imagemagick
on OS X).
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.