我在處理Node.js(v0.4.12)模塊時遇到了一個奇怪的問題。這是一個CouchDB模塊,雖然我非常肯定CouchDB在這裏不是問題,但我會將它包含進來,因爲它可能是有用的信息。Node.js使用二進制文件將http.ClientRequest管道傳輸到fs.createWriteStream導致損壞/臃腫的文件
無論如何,我正在編寫一個包裝器,用於上傳和下載附件與CouchDB。我的上傳部分工作得很好,這是我遇到困難的下載部分。
我的測試過程是這樣的:
- 上傳圖像文件(
http.request
,fs.createReadStream
) - 下載文件(
http.request
) - 保存下載文件到不同的位置進行比較/腐敗檢查(
fs.createWriteStream
,stream.pipe
)
這適用於純文本文件,但是二進制像圖片這樣的文件行爲有所不同。
正如我前面提到的,上傳顯示正常。正如我可以訪問CouchDB中的URL並查看圖像。 (大小匹配,它呈現我上傳的圖像)當我使用我的模塊下載文件並保存時,輸出文件大於源文件(大50-100%),並且無法通過任何圖像打開編輯。 (因此,它在某種程度上「損壞了」)
當我提到二進制文件時,我是否錯過了Streams?我試過將兩邊的encoding
更改爲"binary"
和"base64"
,但輸出文件仍比源文件大50%。在我發現編碼選項之前,它被設置爲"utf8"
,並且輸出文件大100%,所以這導致我認爲這是一個編碼問題。
我也嘗試手動管道流(而不是使用pipe
方法本身),但結果是相同的。
啊哈,這個伎倆!太感謝了! –