我正在尝试构建一个我想存储图像的REST API。我正在使用Node,Express和MongoDB。现在,为了存储图像,我正在使用gridfs,multer,因为我想将图像存储在数据库中。
现在该部分运行良好。这是代码
const storage = new GridFsStorage({
url: MongoURL,
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString('hex') + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: 'images'
};
resolve(fileInfo);
});
});
}
});
const upload = multer({ storage });
router.put('/update/profile-picture', checkAuth,
upload.single('profile_picture'),(req,res) => {
console.log(req.file);
res.json('Image Upload');
});
由于代码很长,我没有上传整个代码。
现在在存储图像之前,我想压缩图像以节省空间。因此,我决定使用jimp(我愿意使用任何东西)。
所以我认为我需要使用中间件。那么,如何制作一个可以调整图像大小并压缩图像的中间件呢?
答案 0 :(得分:1)
我正在使用带有imageimage的multer,它工作得很好,但是您必须先写入文件:
const easyimage = require('easyimage');
app.use(multer({
dest: "./public/img",
limits: { fileSize: 3* 1024 * 1024}, //3mb
inMemory: true
}));
app.use(function(req, res, next){
// write file
fs.writeFile( __dirname + "/../" + req.files.file.path, req.files.file.buffer, function(err) {
return next();
});
});
app.use(function(req, res, next)[
easyimage.resize({
src: __dirname+"/../"+req.files.file.path,
dst: __dirname+"/../"+req.files.file.path,
width: 640,
height: 249,
quality: 100,
ignoreAspectRatio: true
}).then((file) => {
return next();
});
});