【问题标题】:nodejs s3-streams ReadStream throws unspecified error eventnodejs s3-streams ReadStream 抛出未指定的错误事件
【发布时间】:2017-12-25 08:02:47
【问题描述】:

我正在尝试从 S3 下载文件(我已成功上传文件)

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-streams 源,它似乎在请求 http 标头时失败并发出错误。

【问题讨论】:

  • 尝试注释掉.on('error'... 位。然后是完成处理程序。仍然有错误?
  • 尝试跳过实例化newS3S.ReadStream

标签: node.js amazon-web-services amazon-s3


【解决方案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));
    });
  },
}

【讨论】:

    猜你喜欢
    • 2019-10-20
    • 2020-10-10
    • 1970-01-01
    • 2017-01-25
    • 2021-10-22
    • 1970-01-01
    • 2013-05-25
    • 2019-01-08
    • 2019-05-04
    相关资源
    最近更新 更多