节点只写一半的二进制数据

时间:2017-05-02 17:11:31

标签: node.js express

这是我的简单快递服务:

let express = require('express'),
    fs      = require('fs'),
    path    = require('path');

var app = express();
app.set("json spaces", 2);
app.use(express.static(__dirname + "/static"));

app.use(function(req, res, next) {
  var data = new Buffer('');
  req.on('data', function(chunk) {
      data = Buffer.concat([data, chunk]);
  });
  req.on('end', function() {
    req.rawBody = data;
    next();
  });
});

app.post("/upload/:filename", function(req, res) {
    let path = "/tmp/" + req.params.filename;
    fs.writeFile(path, req.rawBody, "binary", function(error) {
        res.send({
            message: "sadfasdf"
        });
    });
});

app.listen(3001, function() {
    console.log("Started!");
});

我这样做是为了上传二进制数据:

curl -H "Content-Type: application/octet-stream" -X POST http://localhost:3001/upload/test.tiff -d @/home/vagrant/test.tiff

对于大约1100kb的文件,它实际上只会写入大约622kb。有人能告诉我出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

这就是我使用curl的问题。我使用的是-d,而应该使用--data-binary代替。