Моему приложению стека MEAN требуется функция, позволяющая пользователям выбирать любое количество файлов из списка файлов, доступных на s3, которые затем загружаются, архивируются и возвращаются пользователю для загрузки. Для очень больших файлов первоначальный запрос будет превышен по времени, пока загружаются / упаковываются большие файлы, поэтому теперь есть 3 отдельных запроса. Первый запрос - это POST, предоставляющий список файлов, который возвращает токен. Как только этот запрос возвращается, второй запрос GET с постоянным опросом отправляется с использованием этого токена, чтобы определить, завершена ли загрузка / архивирование. Это будет срабатывать раз в секунду, пока не получит желаемый ответ. Как только загрузка и архивирование файлов завершены, создается запись в БД, соответствующая предоставленному токену, который удовлетворяет второму запросу, теперь запускается GET третий и последний запрос, который является запросом на загрузку завершенного файла.
function downloadZip( req: Request, res: Response, next: Function ) {
if ( !req.params.token ) {
return next( new Error( "downloadZip requires token." ) );
}
icmDownloadModel.findByToken( req.params.token, ( err, data ) => {
if ( err ) {
return next( err );
}
if ( data && data.fileName && data.token ) {
let localPath: string = path.join( __dirname, "..", "uploads", data.token + '.zip' );
res.download( localPath, data.fileName, err => {
if ( err ) {
return next( err );
}
fs.unlink( localPath );
icmDownloadModel.delete( data._id, ( err ) => {
if ( err ) {
next( err );
}
});
} );
} else {
next( new Error( "Unable to locate file." ) );
}
} );
};
Пока что это работает почти идеально, однако при попытке загрузить файлы размером 1 ГБ + я получаю сообщение об ошибке «запрос прерван». Файлы успешно загружаются с s3 и архивируются, но через несколько секунд res.download () исчезает. Мне удалось загрузить файлы размером более 250 МБ без проблем. Кроме того, это прекрасно работает на моем локальном экземпляре, но не работает в среде реального DEV.
Любая помощь будет оценена.