如何在SharpJS中使用Sharp调整图像大小然后使用multer上传

时间:2018-12-01 08:50:17

标签: node.js mongodb image-uploading multer multer-gridfs-storage

我正在开发一项功能,允许用户使用nodejs将图像上传到mongodb:

  • 我的问题:

    从用户的请求中获取图像文件并执行2个任务:例如,将当前图像存储到具有集合名称“ Origin_image”的mongodb中,并调整当前图像的大小并存储到具有集合名称“ Thumbnail_image”的mongodb中

  • 到目前为止,我的解决方案:

    我只使用multer-gridfs-storage和multer之类的代码来存储成功的原始图像

    const multer = require('multer'); const GridFsStorage = require('multer-gridfs-storage');

    const multer = require('multer'); const GridFsStorage = require('multer-gridfs-storage');

            let storageFS = new GridFsStorage({
                db: app.get("mongodb"),
                file: (req, file) => {
                    return new Promise((resolve, reject) => {
                        crypto.randomBytes(16, (err, buf) => {
                            if (err) {
                                return reject(err);
                            }
                            const filename = file.originalname;
                            const fileInfo = {
                                filename: filename,
                                bucketName: 'images'
                            };
                            resolve(fileInfo);
                        });
                    });
                }
            });
    
        var upload = multer({ storage: storageFS }).single('image');
    
        exports.uploadImage = async function (req, res) {
        try {
            upload(req, res, function (err) {
                if (err) {
                    return res.send(err)
                }
                res.json({
                    status: true,
                    filePath: req.file.originalname
                });
            });
        } catch (error) {
            res.send(error);
        }
    }
    

有人有解决我问题的想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

如果您在前端使用Angular,请让最终用户处理图像大小调整,以便您的服务器不必处理开销。我目前正在使用ng2-img-max调整图像大小。您可以在文件更改时启动调整大小。

我也想先创建缩略图,然后再创建原始缩略图,但这在调整大小和在调整大小之前又造成了巨大的问题,因为在GridFs对其进行任何操作之前,它们如何存储它们,剩下的就是响应。因此,节省一些时间。仅调整一次大小,直到达到用户的限制大小,然后再显示缩略图,将sharp与自定义查询参数一起使用即可显示所需的大小。

祝你好运,编码愉快。