Node.js二进制HTTP流

Ale*_*ato 5 binaryfiles stream node.js express

我需要从客户端(nodejs命令行)和服务器(表达nodejs)流式传输文件。

这是客户端:

var request = require('request');
var fs = require('fs');

// ...

  var readStream = fs.createReadStream(file.path);
  readStream.on('end', function() {
    that.emit('finished');
  });
  readStream.pipe(request.post(target));

// ...
Run Code Online (Sandbox Code Playgroud)

这是服务器端:

var fs = require('fs');
var path = require('path');

// ...

    app.post('/:filename', function(req, res) {
      req.setEncoding('binary');
      var filename = path.basename(req.params.filename);
      filename = path.resolve(destinationDir, filename);
      var dst = fs.createWriteStream(filename);
      req.pipe(dst);
      req.on('end', function() {
        res.send(200);
      });
    });

// ...
Run Code Online (Sandbox Code Playgroud)

一切正常,文件已正确保存在服务器端...但是它们比源文件大50%。我尝试查看两个文件之间的区别,hexdump并且服务器端文件的内容相似,但有时为0xC2。我想这与编码有关。

Pau*_*gel 3

别打电话req.setEncoding('binary')

这会将每个块转换为字符串,主要用于如果您想从流中读取字符串。由于您直接将请求通过管道传送到文件,因此您不需要这样做。