Поток файлов в node/экспресс клиенту

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

Очевидно, res.download будет выполнять работу красиво, но ни одна из функций ответа. * не принимает поток, только пути к файлам.

Я посмотрел на res.download impl, и он просто устанавливает заголовок Content-Disposition, а затем sendfile.

Поэтому я мог бы достичь этого, используя этот пост в качестве руководства. Node.js: поток потока в ответ задерживается через HTTPS

Но, похоже, я пропустил все аспекты упаковки, которые выполняет res.send.

Я что-то пропустил или должен просто сделать трубку и не беспокоиться об этом - что здесь лучше всего?

В настоящее время создаются временные файлы, поэтому я могу просто использовать res.download.

Ответ 1

Вы можете напрямую передать объект ответа (это поток).

Основной поток файлов будет выглядеть примерно так.

function(req, res, next) {
  if(req.url==="somethingorAnother") {
    res.setHeader("content-type", "some/type");
    fs.createReadStream("./toSomeFile").pipe(res);
  } else {
    next(); // not our concern, pass along to next middleware function
  }
}

Это позаботится о привязке к событиям data и end.

Ответ 2

Убедитесь, что ваш запрос AJAX от клиента имеет соответствующий набор "responseType". например,

$http({
  method :'GET',
  url : http://url,
  params:{},
  responseType: 'arraybuffer'
}).success()