2014-12-18 59 views
4

我在nodejs/express中有一個應用程序,用於生成PDF並在響應中進行流式處理。當我通過curl或wget執行請求時,文件下載就很好。PDF文件在瀏覽器中不正確地下載,但使用wget或使用NodeJS/Express捲曲很好

當我在瀏覽器上執行請求時,文件無法正確下載。 Curiosly,文件大小爲方式大(是59K時wget的/捲曲而101K時,在瀏覽器中下載的下載)

下面是生成響應的片段:

fs.readFile('file.pdf', function(err, data) { 
    res.setHeader('Content-Disposition', 'attachment; filename=' + req.params.id + '.pdf'); 
    res.setHeader('Content-Type', 'application/pdf');     
    res.setHeader('Content-Length', data.length); 
    res.status(200).end(data); 
}); 

我不知道我錯過了一個標題,或者如果請求中有某些內容我應該關注,我不知道,但我不知道爲什麼會發生這種情況。有任何想法嗎?

+0

可能重複的:http://stackoverflow.com/questions/16980323/how-to-download-a-pdf-file-through-javascript – 2014-12-19 01:19:18

+0

雖然他們也提供PDF,我沒有通過快遞直接暴露文件。問題原來是編碼。請參閱下面的答案。 – sauldhernandez 2014-12-24 21:59:40

回答

0

自己想出來。

曾經我改變了它此行

res.status(200).end(data); 

更改爲

res.status(200).end(data, 'binary'); 

,PDF格式是完全發送。

如果未設置編碼,Express會嘗試將其寫爲UTF-8(這會產生不希望的結果)。

無論何時通過Express發送二進制文件,都會將此考慮在內。

相關問題