2014-02-22 23 views
1

我試圖將文件分塊爲數據塊。我發現that link做工作精美,但是當我用上面的庫按以下方式:使用Node.js將塊分流成數據塊

var in = fs.createReadStream(__dirname+'/try.html'), 
     chunker = new SizeChunker({ 
      chunkSize: 2048 
     }), 
     output; 

    chunker.on('chunkStart', function(id, done) { 
     output = fs.createWriteStream('./output-' + id); 
     console.log("Chunkstart!"); 
     console.log("Input: "+in.length); 
     done(); 
    }); 

    chunker.on('chunkEnd', function(id, done) { 
     output.end(); 
     console.log("Chunkend!"); 
     done(); 
    }); 

    chunker.on('data', function(dat) { 
     console.log("Writing chunk to output!") 
     output.write(dat.chunk); 
     console.log(dat.chunk); 
    }); 

    input.pipe(chunker); 

但我收到此錯誤:

_stream_writable.js:201 
    var len = state.objectMode ? 1 : chunk.length; 
            ^
    TypeError: Cannot read property 'length' of undefined 
    at writeOrBuffer (_stream_writable.js:201:41) 
    at WriteStream.Writable.write (_stream_writable.js:180:11) 
    at SizeChunker.<anonymous> (/Users/admin/Documents/chunk.js:16:15) 
    at SizeChunker.EventEmitter.emit (events.js:95:17) 
    at SizeChunker.<anonymous> (_stream_readable.js:746:14) 
    at SizeChunker.EventEmitter.emit (events.js:92:17) 
    at emitReadable_ (_stream_readable.js:408:10) 
    at emitReadable (_stream_readable.js:404:5) 
    at readableAddChunk (_stream_readable.js:165:9) 
    at SizeChunker.Readable.push (_stream_readable.js:127:10) 

而且,in.length是使用console.log()顯示時未定義。任何人都可以請幫我解決這個問題?提前致謝。

回答

3

當您在chunker流上收聽data時,dat參數沒有屬性chunk。您可以在分塊的流自述閱讀以下內容:

每個數據塊是具有以下字段的對象:

ID:組塊的數目(開始爲1)的數據:緩衝器,具有數據

你可以做這樣的事情,而不是:

chunker.on('data', function(dat) { 
    console.log("Writing chunk to output!") 
    output.write(dat.data); 
    console.log(dat); 
}); 

此外,in是一個流,沒有length道具定義了erty。

+0

謝謝。自述文件修復於v0.0.4(推送,發佈) – Olegas

+0

歡迎您訪問 – sousa

+0

@Olegas:chunkSize參數看起來確實不起作用。即使我改變了它,也不會影響輸出文件。如何解決這個問題? – RAhul