2015-12-15 109 views
1

我想讀一個ZIP文件,並輸出到瀏覽器,獲取在網頁上顯示的代碼,並保存爲ZIP文件Node.js的readFileSync ZIP文件

fs.readFileSync('/dir/file.zip','utf-8') 

當我這樣做,我得到的輸出是從PK�coG���^�*filename.txt開始,並持續一段時間。當我將結果文本保存爲file.zip時,我無法解壓文件。它說它的損壞或不是一個有效的ZIP文件。

如果我在Notepad ++中打開一個非常類似的文件,則開始和結束非常相似。我錯過了明顯的東西嗎?

任何想法如何獲得ZIP文件的內容,保存它,所以我可以提取它,只使用fs.readFileSync函數?

+0

你使用純節點HTTP模塊,或者你使用像表達一些圖書館嗎? –

回答

0

ZIP是一個二進制文件類型,當你輸出它在瀏覽器中爲文本和複製粘貼文本到文本編輯器,你將不會獲得與原始文件相同的值(可能Web瀏覽器將其一些內容解釋爲HTML標記,並且/或者複製粘貼會破壞一些二進制字符,並且/或者文本編輯器本身會破壞它們) 。

你應該做的服務文件到瀏覽器的時候,讓瀏覽器知道這是一個ZIP和可以顯示用戶文件下載提示設置相應的HTTP響應頭。如果您不發送任何響應標題,則瀏覽器將僅顯示內容作爲無意義的文本文件。

看一看這個問題,其中有一個PHP的解決方案:

https://stackoverflow.com/a/10817739/245966

基本上你需要設置相應的Content-TypeContent-Disposition頭,和(可選)Content-Length

setResponseHeader('Content-Disposition: attachment; filename=myfile.zip'); 
setResponseHeader('Content-Type: application/zip'); 
setResponseHeader('Content-Length: ' + fileLengthInBytes); 

替換setResponseHeader與你的HTTP框架,設置響應頭部相應的呼叫。

+0

Downvoter護理解釋downvote? –

0

你想讀一個zip文件作爲字符編碼(UTF-8),這也許應該改爲「二進制」