[英]Upload large files to AWS s3 using express js synchrounsly
目前,我正在使用putObject
通过REST api调用将大文件上传到AWS s3。
var params ={
Bucket:'lambdacushbu',
Key:req.files.image.name,
Body:req.files.image.data
}
s3.putObject(params,function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else {
console.timeEnd('Uploadtime');
console.log("uploaded",data);
res.json({
'status':'Uploaded',
'url':data.Location
});
} // successful response
});
但是它看起来像异步的,我希望以上情况在同步模式下也发生超时,但是文件正在上传到AWS s3。
那么如何增加超时值呢? 尝试使用connect-timeout
包
app.use(timeout('600000'));
但这没用
尝试使用upload
功能而不是putObject
。 那应该解决您的超时问题。
这是该功能的文档: http : //docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property
同步调用肯定会降低您应用的性能。 您能为我提供有关您的问题的更多详细信息,以便我们找到异步解决方案吗?
编辑:这是您应该如何在控制器中返回响应的方法:
router.post('/your-route',
//additional middlewares
function(req, res, next) {
var params = {
Bucket:'lambdacushbu',
Key:req.files.image.name,
Body:req.files.image.data
}
s3.upload(params,function(err, data) {
if (err) { res.json(err); }
else {
res.json({
'status':'Uploaded',
'url':data.Location
}
});
}
);
并确保不要在此路由中的其他任何地方调用res.json()
或res.send()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.