【发布时间】:2016-06-03 03:23:32
【问题描述】:
我目前正在为我的用户实施文件/图像上传服务。我想在上传到我的 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: '..'});
});
});
我想要做的:在上传之前转换图像。我不确定我是否需要在这里使用 multer/busboy 或者我可以使用 NodeJS 来完成(因此我也标记了 NodeJS 和 express)。
所以我的问题是:我可以在哪里拦截上传并在上传到我的 S3 存储桶之前对其进行转换?
【问题讨论】:
-
好吧,您可以在上传到 S3 之前将文件保存在某个临时文件夹中吗?如果您不想将文件保存在内存中,则可以在内存中执行此操作,这取决于图像的大小,这种方法不适合较大的文件。
-
@RistoNovik 我可能可以做到这一点。但这听起来非常昂贵/不方便。
-
您可以在前端转换图像,然后再将其发送到后端。
-
@AyoolaSolomon 没错,无论如何这将是调整大小的第一步,但您不应该只依赖前端。
-
@AyoolaSolomon 是的,不。我可以调整它的大小;但我无法想象我可以在前端完美地优化它。即使我可以: 不保证会完成;没有这些转换,有人可以
POST它,我想在任何情况下避免这种情况。
标签: node.js express multer busboy