Ограниченная загрузка файла не вызывает загрузку браузера

У меня есть случай, когда я хочу передать файлы из 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);
});

Почему прогресс не отображается в браузере? Что мне не хватает? Что-нибудь на стороне клиента, на стороне сервера или на обоих? Я бился головой об этом уже некоторое время.

0 ответов

Другие вопросы по тегам