我正在尝试从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-stream源代码,似乎无法请求http标头并发出错误。
答案 0 :(得分: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));
});
},
}