Как описано в этом SO-потоке :
Вы можете просто направить поток чтения в ответ вместо того, чтобы передать его в файл, просто убедитесь, что введены правильные Content-Type
иустановите его как вложение, чтобы браузер знал, как правильно обрабатывать ответ.
res.attachment(req.params.name);
await s3.getObject({
Bucket: <bucket-name>,
Key: req.params.name + ".apkg"
}).createReadStream().pipe(res);
Более подробно об этом можно создать подписанный URL-адрес непосредственно для объекта S3, а затем позволить клиенту загружать файлы напрямую.с S3 вместо потоковой передачи с вашего веб-сервера узла.Это уменьшит нагрузку на ваш веб-сервер.
Вам нужно будет использовать метод getSignedUrl из AWS S3 SDK для JS.
Затем, получив URL-адрес, простоверните его своему клиенту, чтобы загрузить файл самостоятельно.
Вам следует принять во внимание, что как только вы дадите клиенту подписанный URL-адрес, который имеет разрешения на загрузку, скажем, на 5 минут, он сможет загружать этот файл только в течение следующих 5 минут.И вам также следует принять во внимание, что они смогут передать этот URL кому-либо еще для загрузки в течение этих 5 минут, так что это зависит от того, насколько вам это нужно.