У меня возникают некоторые проблемы с загрузкой большого (3,5 ГБ) файла из S3 в экземпляр EC2.в 95% случаев он работает отлично и быстро - возможно, 30 секунд.Тем не менее, это 5% времени он останавливается и может занять> 2 часа для загрузки.Перезапуск задания обычно решает эту проблему - показывая, что проблема временная.Это заставляет меня думать, что есть проблема с тем, как я загружаю файлы.Ниже моя реализация - я передаю поток чтения в поток записи на диск и возвращаю обещание, которое разрешается, когда оно выполнено (или отклоняется при ошибке).
Является ли это предпочтительным методом загрузки больших файлов из S3 с помощью node.js?Есть ли какие-нибудь "ошибки", о которых я должен знать?
function getDownloadStream(Bucket, Key) {
return s3
.getObject({
Bucket,
Key
})
.on('error', (error) => {
console.error(error);
return Promise.reject(`S3 Download Error: ${error}`);
})
.createReadStream();
}
function downloadFile(inputBucket, key, destination) {
return new Promise(function(resolve, reject){
getDownloadStream(inputBucket, key)
.on('end', () => {
resolve(destination);
})
.on('error', reject)
.pipe(fs.createWriteStream(destination));
});
}