通过multerjs上传图片+复制(低分辨率缩略图)

问题描述 投票:2回答:1

我正在建立一个允许用户上传头像的网络应用。然而,除了头像之外,我还想创建一个低分辨率的缩略图(例如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个回答
0
投票

你可以使用锐利的调整大小你的图像在你的路由器。

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.unlinkSync(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.unlinkSync(req.file.path) 删除你的原始图像 ./uploads

© www.soinside.com 2019 - 2024. All rights reserved.