gpt4 book ai didi

javascript - AWS S3 CreateReadStream在循环中仅读取和写入1个文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:44 25 4
gpt4 key购买 nike

我正在尝试使用读取流从 S3 检索多个文件,并将它们插入到本地的单个文件中。

下面,“输出”变量是我希望使用下载的 S3 文件数据附加到的单个写入流。

我正在循环使用 nextDay 变量作为 S3 key 的日期。 fileservice.s3Handler.getS3Obj 返回一个 S3 对象,该对象允许单个文件的读取流并附加到输出文件。但是,没有其他文件被读取,也没有使用 on('data', ()) 方法显示控制台。我尝试将读取流包装在一个 promise 中,尝试等待读取完成,但它运行了相同的错误。

最近我不断收到此错误:“ERR_STREAM_WRITE_AFTER_END”

不确定这里出了什么问题。

async fetchCSV(req, res) {

const output = fs.createWriteStream(outputPathWithFile, {
'flags': 'a'});

let nextDay = startDate;

while (nextDay !== endDate) {

const s3path = path.join(`${req.params.stationId}`, `${nextDay}.csv`);

const file = await this.fileService.s3Handler.getS3Obj(s3path);

await this.completePipe(file, output);

nextDay = await getTomorrow(nextDay);
}

}

completePipe(file, output) {
return new Promise((resolve) => {
file.createReadStream().on('finish', () => {
resolve();

}).on('error', (err) => {
resolve();

}).on('data', (data) => {
console.log(data.toString());

}).pipe(output);
})
}

}

getS3Obj(file) {

return new Promise(async (resolve) => {

const getParams = {
Bucket: this.bucket,
Key: file
};
resolve(this.s3.getObject(getParams, (err) => {

if (err) {
console.log('Error in getS3 object')
}
}));


})
}

请帮帮我?

最佳答案

解决了。

做了几件事:

  1. 向管道方法添加了一个标签。

    stream.pipe(输出, {end: false})

  2. 我没有为 Promise 创建新函数,而是将以下代码放入其中:

    await new Promise((resolve) => {
    stream.once('finish', () => {
    resolve();
    });
    });

但标签才是让它发挥作用的原因, promise 只是一个整理。

耶。

关于javascript - AWS S3 CreateReadStream在循环中仅读取和写入1个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60114478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com