使用 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)

此外,当使用 console.log() 显示时,in.length 是未定义的。任何人都可以帮我解决这个问题吗?提前谢谢。

当您侦听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属性。

相关内容

  • 没有找到相关文章

最新更新