如何在使用 GridFS 和 NodeJS 将图像存储在 MongoDB 之前对其进行压缩?

问题描述

我正在尝试使用 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