0

我在这里得到的一段示例代码有一个奇怪的问题,核心部分是:

server.on('request', function(request, response) {
  var file = fs.createWriteStream('copy.csv');
  var fileSize = request.headers['content-length'];
  var uploadedSize = 0;

  request.on('data', function (chunk) {
    uploadedSize += chunk.length;
    uploadProgress = (uploadedSize/fileSize) * 100;
    response.write(Math.round(uploadProgress) + "%" + " uploaded\n" );
    var bufferStore = file.write(chunk);
    console.log(bufferStore);
    console.log(chunk);

    if(!bufferStore) 
    {
      request.pause();
    }
  });

  file.on('drain', function() {
    request.resume();
  });

  request.on('end', function() {
    response.write('Upload done!');
    response.end();
  });
});

问题是,copy.csv该过程完成后文件不包含任何内容。
我试图添加file.end();-callback request.on('end',但它没有成功。但是,如果我在所述回调中添加导致异常的错误代码,则文件编写得很好(尽管这个 ofc 不能成为最终解决方案)。

4

2 回答 2

1

To notify the stream that there are no more chunks to be read, you can simply call your_stream.push(null). You can read more about streams and push(null) from the excellent substack's stream guide.

于 2013-08-10T21:53:26.153 回答
1

试试这个结构:

var file = fs.WriteStream('copy.csv');
    fileSize = request.headers['content-length'],
    uploadedSize = 0;

request.on('readable', function () { // Node.js 0.10 (Streams2 interface)
    var newData = this.read() || new Buffer(0); // Sometimes may come null
    file.write(newData);
    uploadedSize += newData.length;
    response.write(Math.round((uploadedSize / fileSize) * 100) + "%" + " uploaded\n" );
});

request.on('end', function () {
    response.write('Upload done!');
    response.end();
    file.end();
});
于 2013-08-10T20:12:38.887 回答