2014-02-22 21 views
16

1流呢)我使用express.js從字符串創建node.js的一個文本文件,並響應

2)我有一個字符串「Hello World!」

3)我希望用戶點擊

<a href=/download>Download</a> 

4)用戶應該得到hello.txt的下載與它的文本,而不是打開一個標籤與文本。我已經找到了實現這個目標的方法,我猜測它與從緩衝區和管道創建readstreams到響應有關,但我大部分的例子都是從磁盤讀取實際文件,我沒有想從磁盤讀取,我只想用從字符串創建的文件進行響應。

謝謝!

+0

是否要創建一個下載鏈接並讓用戶下載該文件? – V31

+0

是的下載鏈接,但創建一個下載鏈接不是主要問題,我如何轉換字符串「Hello World!」以expressjs的形式發送到一個文本文件。 – user1323136

+0

嘗試使用socket.io並將txt文件作爲套接字消息發送,而不是依賴於req-res模塊 – V31

回答

24

我想我明白你想要做什麼。您想要將.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。這裏有一個很好的參考Internet Media Types and MIME types

+3

''Content-Disposition「:」attachment; filename = \「Hello.txt \」「'會有所幫助,但僅限於某些瀏覽器。 –

+0

嘿,謝謝你,你說得對,我想你的答案几乎就在那裏,除了我想給文件命名。 – user1323136

+0

如果這個答案解決了您的問題,請您將此標記爲解決方案嗎? – tsturzl

1

感謝您的幫助,這就是我最終得到的結果: @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(); 
+0

您指定您使用快遞。如果你打算使用快遞,我建議實際使用它。你在做什麼是純粹的node.js – tsturzl

1

這對我有用!

var text="hello world"; 

res.setHeader('Content-type', "application/octet-stream"); 

res.setHeader('Content-disposition', 'attachment; filename=file.txt'); 

res.send(text); 
相關問題