繁体   English   中英

同步使用express js将大文件上传到AWS s3

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM