2017-07-19 73 views
0

我试图下载从S3文件(我已经成功上传的文件)S3的NodeJS流ReadStream抛出未指定的错误事件

const fs = require('fs'); 
const AWS = require('aws-sdk'); 
const S3 = AWS.S3; 
const S3S = require('s3-streams'); 

const awsSettings = { 
    ... // config stuff 
} 

var s3Instance = new S3(awsSettings); 
module.exports = { 
    download: (remoteReference, bucket, saveFile) => { 
     return new Promise((resolve, reject) => { 
      let download = new S3S.ReadStream(s3Instance, { 
       Bucket: bucket, 
       Key: remoteReference 
      }); 
      download.pipe(fs.createWriteStream(saveFile)) 
      .on('finish',() => { 
       resolve(); 
      }) 
      .on('error', (err) => { 
       reject(err); 
      }); 
     }); 
    }, 
} 

然而,节点崩溃时调用下载

崩溃日志:

server/node_modules/aws-sdk/lib/request.js:31 
      throw err; 
      ^
Error: Uncaught, unspecified "error" event. ([object Object]) 
    at S3ReadStream.emit (events.js:163:17) 
    at Request.httpHeaders (server/node_modules/s3-streams/lib/read.js:52:9) 
    at Request.callListeners (server/node_modules/aws-sdk/lib/sequential_executor.js:105:20) 
    at Request.emit (server/node_modules/aws-sdk/lib/sequential_executor.js:77:10) 
    at Request.emit (server/node_modules/aws-sdk/lib/request.js:683:14) 
    at IncomingMessage.onHeaders (server/node_modules/aws-sdk/lib/event_listeners.js:245:24) 
    at emitThree (events.js:116:13) 
    at IncomingMessage.emit (events.js:194:7) 
    at ClientRequest.<anonymous> (server/node_modules/aws-sdk/lib/http/node.js:46:16) 
    at ClientRequest.g (events.js:292:16) 
    at emitOne (events.js:96:13) 
    at ClientRequest.emit (events.js:188:7) 
    at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:473:21) 
    at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23) 
    at TLSSocket.socketOnData (_http_client.js:362:20) 
    at emitOne (events.js:96:13) 

我不太确定是什么原因导致这个问题,但深挖S3流源,它似乎是失败的请求的HTTP头并发出一个错误。

+0

尝试注释掉'。对(“错误” ...'位 然后结束处理 还是错误 –

+0

尝试跳过实例化一个'新''S3S.ReadStream' –

回答

1

怎么是这样的:。。?

var s3Instance = new S3(awsSettings); 
module.exports = { 
    download: (remoteReference, bucket, saveFile) => { 
    return new Promise((resolve, reject) => { 
     let download = S3S.ReadStream(s3Instance, { 
     Bucket: bucket, 
     Key: remoteReference 
     }) 
     .on('finish',() => { 
     resolve(); 
     }) 
     .on('error', (err) => { 
     reject(err); 
     }) 
     .pipe(fs.createWriteStream(saveFile)); 
    }); 
    }, 
} 
+0

它的工作!我现在可以处理一个可读的错误! –

相关问题