问题描述
我正在尝试使用 GridFS 和 MongoDB 在我的 NodeJS 应用程序中上传图像。 我想在将图像上传到 MongoDB 之前对其进行压缩,并且我已经共享了 GridFS 中间件。
我想知道我应该把压缩代码放在哪里,或者是否有更好的方法来压缩图像?
require('dotenv').config();
const multer = require('multer');
const GridFsstorage = require('multer-gridfs-storage');
const Grid = require('gridfs-stream');
const Mongoose = require('mongoose');
const Mongouri = process.env.MONGO_URL;
let conn = Mongoose.connection;
let gfs;
conn.once('open',()=>{
gfs = Grid(conn.db,Mongoose.mongo);
gfs.collection('Posts');
});
//defining the middleware for multer so this will be called everytiime a new image is uploaded using multer
let storage = new GridFsstorage({
url:Mongouri,file:(req,file)=>{
return new Promise(
(resolve,reject)=>{
const fileInfo = {
filename:Mongoose.Types.ObjectId()+file.originalname,bucketName:"Posts"
};
resolve(fileInfo);
}
);
}
});
//initialising multer with the middleware
const upload = multer({storage});
module.exports = upload;
解决方法
Sharp 是一种更好的工具,可以在将图像保存到数据库之前对其进行压缩。来源 - Sharp npm module