使用Node.js将数据流分组为数据块

时间:2014-02-22 07:21:21

标签: node.js stream

我正在尝试将文件分块为数据块。我发现that link能很好地完成工作,但是当我以下列方式使用上述库时:

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)

此外,使用console.log()显示时,in.length未定义。有谁可以帮我解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:3)

当您在data流上收听chunker时,dat参数没有属性chunk。您可以在chunking-stream自述文件中阅读以下内容:

  

每个数据块都是一个包含以下字段的对象:

     

id:块数(从1开始)数据:带数据的缓冲区

你可以这样做:

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

此外,in是一个流,没有定义length属性。