Я пытаюсь извлечь несколько файлов из S3 с использованием readstream и локально вставить их в один файл.
Ниже переменная 'output' - это единственный записывающий поток, к которому я добавлю sh используя загруженные данные файла S3.
Я перебираю дни, когда переменная nextDay используется для клавиши S3. Fileservice.s3Handler.getS3Obj возвращает объект S3, который позволяет читать поток для одного файла и добавлять его в выходной файл. Однако никакие другие файлы не читаются и не отображают консоль с использованием метода on ('data', ()). Я пытался обернуть поток чтения в обещание, чтобы попытаться дождаться окончания чтения, но он запускает ту же ошибку.
В последнее время я получаю эту ошибку: "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')
}
}));
})
}
Пожалуйста, помогите мне?