2017-04-04 16 views
0

現在、私はputObjectを使用して、REST APIコールを使用してAWS s3に大容量のファイルをアップロードしています。非同期のようなExpress js synchrounslyを使用して大きなファイルを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')); 

と試みたが、それは代わりにputObjectupload機能を使用してみてください

+0

のどこにもres.json()またはres.send()を呼び出さないことを確認してください – hjpotter92

+0

しかし、multerはasyncですか? –

答えて

1

を働いたdosen't。それはあなたのタイムアウトの問題を解決するはずです。ここで

は、その関数のドキュメントです:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property

同期呼び出しは間違いなく、アプリケーションのパフォーマンスが低下します。非同期ソリューションを見つけるために問題の詳細を教えてください。

EDIT:ここ は、あなたのコントローラーで応答を返すべきかです:

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          
     } 
     });            
    } 
); 

そして、あなたはmulter-S3のライブラリを試してみてください、このルート

+0

アップロードはREST APIコールi(モバイルから)とその非同期で開始されます。ただし、残りのAPIはすでにレスポンスを送出しています。アップロードが完了したかどうかをクライアント側で確認するには –

+0

S3のアップロードが完了したら、クライアントに返信する必要があります。 私は自分の答えを変更し、コード例を提供します –

+0

このアプローチは本当に良いです。しかし、パフォーマンスがわかると、AWS S3コマンドラインは3分で3GBのファイルをアップロードしますが、このコマンドは15分で同じことを行います。スピードアップする方法はありますか? – Ashish

関連する問題