0

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

  • 我的问题 :

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

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

    我只是通过使用 multer-gridfs-storage 和 multer 来存储成功的原始图像,如下面的代码

    常量 multer = 要求('multer'); 常量 GridFsStorage = require('multer-gridfs-storage');

    常量 multer = 要求('multer'); 常量 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);
        }
    }
    

有没有人有任何想法来解决我的问题?谢谢 !

4

1 回答 1

0

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

我还想要缩略图,然后是原始缩略图,但这会在调整两者的大小以及如何将它们链接为 GridFs 存储它们之前造成巨大的性能问题,然后你才能对它们进行任何操作,剩下的就是响应。因此,为自己节省一些时间。只需将大小调整为用户的有限大小,然后为显示缩略图图像,使用sharp和自定义查询参数来显示您想要的大小。

祝你好运,编码愉快。

于 2018-12-23T10:18:51.317 回答