Chrome не показывает файл как загруженный, пока не отправлено 8 байт (Firefox делает) - PullRequest
0 голосов
/ 21 октября 2018

Я хочу использовать метод http, который отправляет файл пользователю, но ему требуется некоторое время (например, 4 секунды) для создания содержимого файла.

Что мне нужно, так это чтобы браузер мгновенно отображалфайл как загружаемый.Но Chrome показывает, что файл загружается только после отправки 8 байт.Я не знаю первые 8 байтов моего файла заранее.Однако Firefox мгновенно показывает загрузку.

Вот пример (в Express, но бэкэнд-технология не имеет значения, у меня был такой же пример в ASP.Net):

const express = require('express');

const app = express();
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))

app.get('/:type?', async (req, res) =>  {
  res.set("Content-type", "application/octet-stream");
  res.set("Content-Disposition", "attachment;filename=\"Report.txt\"");

  res.write('1234567'); 
  if (req.params.type == "instant")
    res.write('8'); //if I send 8 bytes before sleep, file downloading appears instantly
  await sleep(4*1000);

  res.write('9');
  res.end();
});

app.listen(3000, () => {
  console.log('server started');
});

https://repl.it/@ArturDrobinskiy/AllJumboSpellchecker?language=nodejs

Есть ли способ решить эту проблему?

Пример URL с кодом выше:

1 Ответ

0 голосов
/ 30 октября 2018

Вы можете попробовать добавить в файл символы пробела шириной 0.

const express = require('express');

const app = express();
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))

app.get('/:type?', async (req, res) =>  {
  res.set("Content-type", "application/octet-stream");
  res.set("Content-Disposition", "attachment; filename=\"Report.txt\"");
  res.write('\u200B\u200B\u200B\u200B\u200B\u200B\u200B\u200B'); 
  //res.write('1234567'); 
  if (req.params.type == "instant")
    res.write('8'); //if I send 8 bytes before sleep, file downloading appears instantly
  await sleep(4*1000);

  res.write('9');
  res.end();
});

app.listen(3000, () => {
  console.log('server started');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...