#node.js #amazon-s3 #zlib
#node.js #amazon-s3 #zlib
Вопрос:
Я пытаюсь параллельно прочитать несколько сжатых файлов из s3, выполнить операцию преобразования и загрузить их обратно в s3. Сбой со следующей ошибкой.
{
"errorType": "Error",
"errorMessage": "unexpected end of file",
"code": "Z_BUF_ERROR",
"errno": -5,
"stack": [
"Error: unexpected end of file",
" at Zlib.zlibOnError [as onerror] (zlib.js:180:17)"
]
}
Вот фрагмент кода для вышеупомянутой проблемы. Пожалуйста, помогите мне решить эту проблему.
for (let inputKey of inputKeys) {
let s3params = {
Bucket: bucket,
Key: inputKey
};
let s3stream;
if (metadata.compression === 'GZIP') {
let unzip = zlib.createGunzip();
s3stream = s3.getObject(s3params).createReadStream().pipe(unzip).pipe(ndjson.parse());
} else {
s3stream = s3.getObject(s3params).createReadStream().pipe(ndjson.parse());
}
// not sending the end event for each of the streams.
s3stream.pipe(inputStream, {end: false});
// after all the files are read, send the end event.
s3stream.once('end', () => {
--remainingFiles === 0 amp;amp; inputStream.emit('end');
});
Комментарии:
1. Сколько вы пытаетесь сделать за раз? Если ваш сервер не справляется и размер окна TCP слишком долго остается равным нулю, серверы S3 удалят вас.
2. Спасибо за быстрый ответ @brad. Я пытаюсь прочитать 150 файлов, каждый из которых размером около 1 МБ. Процесс просто завершается с ошибкой после запуска в течение 5 минут.
3. Определенно похоже, что это занимает слишком много времени. Попробуйте не загружать так много одновременно.