FileReader.readAsDataURL上传到express.js

时间:2012-10-25 13:32:32

标签: javascript node.js express

我有以下代码上传到我的Node.js / Express.js后端。

var reader = new FileReader();
reader.readAsDataURL(file);

reader.onload = function (e) {
  var result = http.post('/files', e.target.result);
  result.success(function () { 
    alert('done'):
  });
}

我的路线如下:

app.post('/files', function (req, res) {
  var cws = fs.createWriteStream(__dirname + '/media/file');
  req.pipe(cws);
  res.send('success');
});

当我用图像应用程序打开/ media / file时,我收到一条警告,说它无法读取它。当我用文本编辑器打开图像文件时,我在里面看到了base64编码的字符串。在将字符串写入桌面之前是否需要首先转换字符串?

1 个答案:

答案 0 :(得分:8)

问题在于DataURL是由元数据预先添加的。首先需要在创建base64缓冲区之前删除该部分。

var data_url = req.body.file;
var matches = data_url.match(/^data:.+\/(.+);base64,(.*)$/);
var ext = matches[1];
var base64_data = matches[2];
var buffer = new Buffer(base64_data, 'base64');

fs.writeFile(__dirname + '/media/file', buffer, function (err) {
  res.send('success');
});

获得了此question的大部分代码。