Imager multer storage engine permit to resize and upload an image to AWS S3.
This project is mostly an integration piece for existing code samples from Multer's storage engine documentation. And was inspired from multer-s3 and gm
apt-get install graphicsmagick
brew install graphicsmagick
npm install multer-imager --save
Tested with s3rver instead of your actual s3 credentials. Doesn't require a real account or changing of hosts files. Includes integration tests ensuring that it should work with express + multer.
npm test
var express = require('express');
var app = express();
var multer = require('multer');
var imager = require('multer-imager');
var upload = multer({
storage: imager({
dirname: 'avatars',
bucket: 'bucket-name',
accessKeyId: 'aws-key-id',
secretAccessKey: 'aws-key',
region: 'us-east-1',
filename: function (req, file, cb) { // [Optional]: define filename (default: random)
cb(null, Date.now()) // i.e. with a timestamp
}, //
gm: { // [Optional]: define graphicsmagick options
width: 200, // doc: http://aheckmann.github.io/gm/docs.html#resize
height: 200,
options: '!',
format: 'png' // Default: jpg
crop: {
width: 200,
height: 200,
x: 0,
y: 0
}
},
s3 : { // [Optional]: define s3 options
Metadata: { // http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html
'customkey': 'data' // "x-amz-meta-customkey","value":"data"
}
}
})
});
// Cf.: https://github.com/expressjs/multer/blob/master/README.md
app.post('/upload', upload.array('file', 1), function(req, res, next){
console.log(req.files); // Print upload details
res.send('Successfully uploaded!');
});