boo*_*oop 3 node.js express multer busboy
我目前正在为我的用户实施文件/图像上传服务。我想在上传到我的 s3 存储桶之前转换这些图像(调整大小/优化)。
目前我在做什么:我前端使用多形式的(我认为在实际执行此处无关紧要..)和multer和multer-s3包在我的后端。
在这里,我的实现被分解为重要的部分。
// SETUP
var multer = require('multer');
var s3 = require('multer-s3');
var storage = s3({
dirname: 'user/uploads',
bucket: auth.aws.s3.bucket,
secretAccessKey: auth.aws.s3.secretAccessKey,
accessKeyId: auth.aws.s3.accessKeyId,
region: auth.aws.s3.region,
filename: function (req, file, cb) {
cb(null, Date.now());
}
});
var upload = multer({storage: storage}).single('img');
// ROUTE
module.exports = Router()
.post('/', function (req, res, next) {
upload(req, res, function (err) {
if (err) {
return res.status(401).json({err: '...'});
}
return res.json({err:null,url: '..'});
});
});
Run Code Online (Sandbox Code Playgroud)
我想要做的是:在上传之前转换图像。我不确定我是否需要在这里使用 multer/busboy 或者我可以只用 NodeJS 来做(因此我已经标记了 NodeJS 和 express )。
所以我的问题是:在上传到我的 S3 存储桶之前,我在哪里可以拦截上传并转换它?
不确定您是否仍在寻找答案,但我遇到了同样的问题。我决定扩展multer-s3包。
我已经向原始存储库打开了拉取请求,但现在,您可以使用我的 fork。
以下是如何使用扩展版本的示例:
var upload = multer({
storage: multerS3({
s3: s3,
bucket: 'some-bucket',
shouldTransform: function (req, file, cb) {
cb(null, /^image/i.test(file.mimetype))
},
transforms: [{
id: 'original',
key: function (req, file, cb) {
cb(null, 'image-original.jpg')
},
transform: function (req, file, cb) {
cb(null, sharp().jpg())
}
}, {
id: 'thumbnail',
key: function (req, file, cb) {
cb(null, 'image-thumbnail.jpg')
},
transform: function (req, file, cb) {
cb(null, sharp().resize(100, 100).jpg())
}
}]
})
})
Run Code Online (Sandbox Code Playgroud)
编辑:我的 fork 现在也可以通过 npm 以名称multer-s3-transform.
| 归档时间: |
|
| 查看次数: |
4748 次 |
| 最近记录: |