2017-07-19 25 views
0

我想將幾個readeableStreams壓縮成一個writableStream。 目的是在內存中完成所有操作,而不是在磁盤上創建實際的zip文件。node.js - 使用歸檔器,其中輸出是緩衝區

對於我正在使用歸檔

 let bufferOutput = Buffer.alloc(5000); 
     let archive = archiver('zip', { 
      zlib: { level: 9 } // Sets the compression level. 
     }); 
     archive.pipe(bufferOutput); 
     archive.append(someReadableStread, { name: test.txt}); 
     archive.finalize(); 

我得到線archive.pipe(bufferOutput);錯誤。

這是錯誤:「dest.on是不是一個函數」

我到底做錯了什麼? THX

UPDATE

我跑的測試和ZIP文件下面的代碼是不正確創建。我錯過了什麼?

const fs = require('fs'), 
    archiver = require('archiver'), 
    streamBuffers = require('stream-buffers'); 

let outputStreamBuffer = new streamBuffers.WritableStreamBuffer({ 
    initialSize: (1000 * 1024), // start at 1000 kilobytes. 
    incrementAmount: (1000 * 1024) // grow by 1000 kilobytes each time buffer overflows. 
}); 

let archive = archiver('zip', { 
    zlib: { level: 9 } // Sets the compression level. 
}); 
archive.pipe(outputStreamBuffer); 

archive.append("this is a test", { name: "test.txt"}); 
archive.finalize(); 

outputStreamBuffer.end(); 

fs.writeFile('output.zip', outputStreamBuffer.getContents(), function() { console.log('done!'); }); 

回答

1

至於爲什麼你看到的垃圾,這是因爲你看到的是壓縮數據,這將看起來像垃圾。

要驗證壓縮是否有效,您可能需要再次解壓,並檢查輸出是否與輸入匹配。

+0

我只注意到它實際上卡住的幫助「outputStreamBuffer.getContents()管(輸出)。」並且不會被執行 –

+1

啊,因爲'outputStreamBuffer.getContents()'給你一個Buffer不是流,所以它沒有'pipe()'函數。 只要做'fs.writeFile('output.zip',outputStreamBuffer.getContents(),function(){console.log('done!');});' –

+0

umm ...仍然不適合我。我已經更新了我的問題,如果你可以看看。 thx很多爲您的幫助 –