Ограниченная загрузка файла не вызывает загрузку браузера
У меня есть случай, когда я хочу передать файлы из AWS S3 через серверную часть NodeJS/express на мой клиент JS/Restangular. Загрузка работает, но кажется, что файл буферизуется где-то во время загрузки, и только когда файл полностью буферизируется, он отображает интерфейс загрузки браузера, обнаруживая, что файл завершен. (см. изображение)
Нет разницы, если идентификатор файла 10 КБ или 1 ГБ, только количество времени, пока законченный файл указан в нижней части.
Без интерфейса загрузки браузера пользователь не информируется о том, что что-то происходит, и может щелкнуть файл несколько раз, особенно если он большой (теоретически нет ограничений на размер файла, и он может составлять чуть более 1 ГБ на единицу),
Вот мой код загрузки клиента:
return new Promise((resolve, reject) => {
let rq = RESTNGULAR.get(this)
.one('documents/download')
.withHttpConfig({ responseType: 'blob' });
rq.param = params;
rq.post()
.then(resolve, reject);
});
и вот мой (немного уменьшенный) внутренний код.
const AWS = require('aws-sdk');
...
res.setHeader('Content-disposition', 'attachment; filename=' + name);
res.setHeader('Content-type', mimeType);
res.setHeader('Content-length', fileSize);
const params = {
Bucket: bucketID,
Key: key
};
s3.getObject(params).createReadStream().then((readStream) => {
readStream.pipe(res);
}).catch((err) => {
err.status && res.status(err.status).send(err.body);
err.status || res.status(500).send(err);
});
Почему прогресс не отображается в браузере? Что мне не хватает? Что-нибудь на стороне клиента, на стороне сервера или на обоих? Я бился головой об этом уже некоторое время.