2017-08-04 23 views
0

ノードAWS-SDKを使用して既存のS3バケットにファイルをアップロードしています。下のコードでは、ファイルは最終的にアップロードされますが、ステータスコードは何も返されないようです。また、ファイルが正常にアップロードされると、return文は実行されません。s3ファイルのアップロードで応答が返されない

コード

exports.create = function(req, res) { 
 
\t var stream = fs.createReadStream(req.file.path); 
 
\t var params = { 
 
\t \t Bucket: 'aws bucket', 
 
\t \t Key: req.file.filename, 
 
\t \t Body: stream, 
 
\t \t ContentLength: req.file.size, 
 
\t \t ContentType: 'audio/mp3' 
 
\t }; 
 
\t var s3upload = s3.upload(params, options).promise(); 
 
\t 
 
\t s3upload 
 
\t \t .then(function(data) { 
 
\t \t \t console.log(data); 
 
\t \t \t return res.sendStatus(201); 
 
\t \t }) 
 
\t \t .catch(function(err) { 
 
\t \t \t return handleError(err); 
 
\t \t }); 
 
}

ログ

POST /api/v0/episode/upload - - ms - - 
 
POST /api/v0/episode/upload - - ms - - 
 
{ Location: 'https://krazykidsradio.s3-us-west-2.amazonaws.com/Parlez-vous%2BFrancais.mp3', 
 
    Bucket: 'krazykidsradio', 
 
    Key: 'Parlez-vous+Francais.mp3', 
 
    ETag: '"f3ecd67cf9ce17a7792ba3adaee93638-11"' }

+1

あなたはfs.createReadStream()を完全に間違って使用しています。 – Darkrum

答えて

0

を参照してください、私はそれを考え出しました。リクエストのタイムアウトは、アップロードが完了するのに十分な長さではありませんでした。したがって、もう一度やり直していました。この問題を解決するために、リクエストのタイムアウトを0に設定し、アップロードを完了するために必要なすべての時間を要求しました。これを適切に設定すると、クライアントに201応答が返されます。

exports.create = function(req, res) { 
    req.setTimeout(0); // <= set a create request to no timeout length. 
    var stream = fs.createReadStream(req.file.path); 
    var params = { 
     Bucket: 'aws bucket', 
     Key: req.file.filename, 
     Body: stream, 
     ContentLength: req.file.size, 
     ContentType: 'audio/mp3' 
    }; 
    var s3upload = s3.upload(params, options).promise(); 
    // return the `Promise` 
    s3upload 
     .then(function(data) { 
      console.log(data); 
      return res.sendStatus(201); 
     }) 
     .catch(function(err) { 
      return handleError(err); 
     }); 
} 
2

また、ファイルが正常にアップロードされると、return文は が実行されません。

ませ値はcreate()コールからreturn編で、Why is value undefined at .then() chained to Promise?

exports.create = function(req, res) { 
    var stream = fs.createReadStream(req.file.path); 
    var params = { 
     Bucket: 'aws bucket', 
     Key: req.file.filename, 
     Body: stream, 
     ContentLength: req.file.size, 
     ContentType: 'audio/mp3' 
    }; 
    var s3upload = s3.upload(params, options).promise(); 
    // return the `Promise` 
    return s3upload 
     .then(function(data) { 
      console.log(data); 
      return res.sendStatus(201); 
     }) 
     .catch(function(err) { 
      return handleError(err); 
     }); 
} 
関連する問題