node.js - Nodejs 二进制 http 流

标签 node.js express stream binaryfiles

我需要从客户端(nodejs 命令行)和服务器(express 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));

// ...

这是服务器端:

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);
      });
    });

// ...

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

最佳答案

不要调用 req.setEncoding('binary')

这将 convert every single chunk into strings并且主要用于如果您想从流中读取字符串。当您直接将请求通过管道传输到文件时,您不需要这样做。

关于node.js - Nodejs 二进制 http 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20102432/

相关文章:

javascript - 使用服务器端语言(如 Javascript)进行 JSONP 调用

java - 如何使用 Jackson 流 API 将文本解析为 Enum 在运行时因不同的枚举类而异?

c# - 我可以同时在 Azure 存储中创建和保存文件吗?

node.js - NodeJS pbkdf2Sync 密码具有从 v0.12.7 到 v6.9.1 的可移植性

javascript - 膝盖 : what is the appropriate way to create an array from results?

javascript - 我如何将全局变量传递给 Jade 模板

Node、Express、Oauth2 和 Passport 的 Angularjs CORS 问题

javascript - "Failed to instantiate module ' app ' due to" Angular 和平均堆栈

python - 如何使用Camgear更改python中的帧率?

android - ionic 运行 android - 错误 : Cannot find module 'internal/fs' - windows