Поток файлов в 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()