【问题标题】:Upload image + duplicate(low-res thumbnail) via multerjs通过multerjs上传图片+副本(低分辨率缩略图)
【发布时间】:2017-02-27 15:55:44
【问题描述】:

我正在构建一个允许用户上传头像的网络应用程序。但是,除了头像之外,我还想创建一个低分辨率缩略图(例如 64 x 64)并将其存储在我的服务器上。目前我正在使用此代码将图像存储在两个目录中,但两个目录中的分辨率相同。如何在缩略图目录中存储不同的分辨率?

 var storage =   multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './uploads/thumbs');
    callback(null, './uploads');
  },
  filename: function (req, file, callback) {
    callback(null, file.fieldname + '-' + Date.now());
  }
});

【问题讨论】:

    标签: node.js express multer


    【解决方案1】:

    您可以使用sharp来调整路由器中的图像大小:

    const storage = multer.diskStorage({
        destination: (req, file, cb) => {
            cb(null, './uploads')
        },
        filename: (req, file, cb) => {
            cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
        }
    })
    

    和:

    router.post('/', upload.single('image'), async (req, res) => {    
        try {
            const { filename: image } = req.file
            await sharp(req.file.path, { failOnError: false })
                .resize(64, 64)
                .withMetadata()
                .toFile(
                    path.resolve(req.file.destination, './thumbs', image.replace(/\.(jpeg|png)$/, `.jpg`))
                )
            fs.unlink(req.file.path)
            return res.json({
                thumb_url: '/uploads/thumbs/' + image.replace(/\.(jpeg|png)$/, `.jpg`)
            });
        } catch (err) {
            console.error(err.message);
            res.status(500).send('Server Error!');
        }
    });
    

    fs.unlink(req.file.path)./uploads 中删除您的原始图像

    【讨论】:

    • 错误:输入文件丢失,我使用完全相同的代码,req.file.buffer 也未定义???
    • 如果你同时使用 multer 和 express-fileupload,你应该删除 express-fileupload 或类似的文件上传库
    猜你喜欢
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2017-11-25
    • 2018-01-14
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多