我已经能够使用multer-s3库将图像文件上传到s3,但现在我试图添加sharp库来调整大小和旋转,但不知道它需要去哪里或如何去。这是我目前上传的代码:
var options = {
'endpoint' : 'https://xxx',
'accessKeyId' : '123',
'secretAccessKey' : '123abc',
'region' : 'xxx'
};
const s3 = new aws.S3(options);
const upload = multer({
storage: multerS3({
s3: s3,
bucket: 'wave',
acl: 'public-read',
metadata: function (req, file, cb) {
cb(null, Object.assign({}, req.body));
},
key: function (request, file, cb) {
console.log('inside multerS3',file);
cb(null, file.originalname);
}
})
}).array('file', 1);
app.post('/upload/', (req,res) => {
upload(req,res, async function (error) {
if(error){
res.send({ status : error });
}else{
console.log(req.files[0]);
res.send({ status : 'true' });
}
});
});
然后对文件执行如下操作:
sharp(input)
.resize({ width: 100 })
.toBuffer()
.then(data => {
// 100 pixels wide, auto-scaled height
});
任何帮助将不胜感激:)
5条答案
按热度按时间c3frrgcw1#
我尝试了很多不同的支持夏普的multer-s3包,但没有一个适合我,所以我决定使用
multer
,aws-sdk
和sharp
。下面是一个运行Express.js的例子。
zbq4xfa02#
好吧,所以我从来没有找到一个实际的解决方案,但我确实得到了一个建议,这是我去的路线。由于性能考虑到多个用户的多次上传,在上传时对图像进行调整大小,旋转和其他任何操作都不是最好的解决方案,因为这将在服务器上产生影响。我们使用的方法是有一个cdn服务器,在该服务器上有一个脚本,可以检测何时上传新文件,并进行调整大小和旋转。
我知道这不是对原来问题的实际修复,但考虑到性能和优化,这是我得到的最佳解决方案。
nfeuvbwi3#
**编辑(12/24/2020):**我不再推荐此软件包,我不再在我的项目中使用它。这个包缺少multerS 3的许多其他特性,包括我经常用来在S3中自动设置内容类型的
AUTO_CONTENT_TYPE
。我强烈建议只使用multerS 3,甚至根本不使用multerS 3,而是使用multiparty
之类的东西自己处理多部分表单数据。**Original post:**我在npm上找到了这个叫做
multer-sharp-s3
的包链接:https://www.npmjs.com/package/multer-sharp-s3。我使用这个实现:
希望这有帮助!
pkwftd7m4#
您可以将contentType方法添加到multerS3选项中,并将管道锐化到文件流。您也可以将它与multerS3库中的默认autoContentType函数组合(链接到autoContentType)。
下面是我的例子:
mqxuamgl5#
Artur提到了我推荐的contentType方法。然而,他使用TypeScript,所以这里是我的完整Multer-S3配置(将所有jpeg,png和jpg转换为webp)在JavaScript中,对于那些想要一点复制粘贴操作的人:
我会提到,虽然这将增加你的上传速度几秒钟(或更多取决于文件大小),如果这是一个问题,为你,因为其他人建议,我会使用CDN。