Создайте текстовый файл в node.js из строки и передайте его в ответ
1) Я использую express.js
2) У меня есть строка "Hello world!"
3) Я хочу, чтобы пользователь нажал
<a href=/download>Download</a>
4) Пользователь должен получить загрузку Hello.txt с текстом в нем, НЕ открывать вкладку с текстом.
5) Я искал способы достижения этого, я предполагаю, что он имеет какое-то отношение к созданию потоков обращений от буфера и трубопроводов к ответу, но большинство примеров касалось чтения реальных файлов с диска, я не хочу для чтения с диска, я просто хочу ответить файлом, созданным из строки.
Спасибо!
Ответы
Ответ 1
Думаю, я понимаю, что вы пытаетесь сделать. Вы хотите отправить файл .txt клиенту, фактически не создав файл на диске.
Это на самом деле довольно простой и очень простой. Все, что вам нужно сделать, - установить свой тип MIME в заголовке, однако большинство браузеров не загружают файлы .txt по умолчанию. Они просто открывают и отображают содержимое.
var text={"hello.txt":"Hello World!","bye.txt":"Goodbye Cruel World!"};
app.get('/files/:name',function(req,res){
res.set({"Content-Disposition":"attachment; filename=\"req.params.name\""});
res.send(text[req.params.name]);
});
В качестве будущей заметки вы можете отправлять любые данные, хранящиеся в виде переменной. Например, если у вас есть буфер, загруженный изображением, вы можете отправить его таким же образом, просто изменив Content-Type
, иначе браузер не имеет представления о том, какие данные вы отправляете, и, я считаю, устанавливает тип по умолчанию для text/html
. Вот хорошая ссылка на Типы интернет-СМИ и типы MIME.
Ответ 2
Спасибо за помощь, ребята, вот что я в итоге:
@aaron, есть ли способ для работы во всех браузерах?
res.setHeader('Content-disposition', 'attachment; filename=theDocument.txt');
res.setHeader('Content-type', 'text/plain');
res.charset = 'UTF-8';
res.write("Hello, world");
res.end();
Ответ 3
это работает на меня!
var text="hello world";
res.setHeader('Content-type', "application/octet-stream");
res.setHeader('Content-disposition', 'attachment; filename=file.txt');
res.send(text);