Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用express js Synchronly将大文件上载到AWS s3_Node.js_Amazon Web Services_Express_Amazon S3 - Fatal编程技术网

Node.js 使用express js Synchronly将大文件上载到AWS s3

Node.js 使用express js Synchronly将大文件上载到AWS s3,node.js,amazon-web-services,express,amazon-s3,Node.js,Amazon Web Services,Express,Amazon S3,目前我正在使用putObject通过RESTAPI调用将大文件上传到AWS s3 var params ={ Bucket:'lambdacushbu', Key:req.files.image.name, Body:req.files.image.data } s3.putObject(params,function(err, data) {

目前我正在使用
putObject
通过RESTAPI调用将大文件上传到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

那么如何增加超时值??尝试使用
连接超时
软件包

app.use(timeout('600000'));

但它不起作用

尝试使用
upload
功能而不是
putObject
。这将解决您的超时问题

以下是该功能的文档:

同步呼叫肯定会降低应用程序的性能。你能给我提供更多关于你的问题的细节以便我们能找到一个异步解决方案吗

编辑: 以下是您应该如何在控制器中返回响应:

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()
此路径中的任何其他位置

尝试multer-s3库,但multer是异步的??上传是通过REST api调用i(来自移动设备)及其异步启动的。但REST api已经发出响应。那么,我如何知道客户端的上传是否完成呢?在S3上的上传完成后,您应该向客户端返回响应。我将修改我的答案,并为您提供一个代码示例。这种方法非常好。但是当我看到性能时,AWS S3命令行在3分钟内上传一个3gb文件,而这个命令在15分钟内完成同样的事情。有没有办法加快速度?