Javascript FileReader.readAsDataURL上载到express.js

Javascript FileReader.readAsDataURL上载到express.js,javascript,node.js,express,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.p

我有以下代码要上传到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/文件时,会收到一条警告,提示它无法读取。当我用文本编辑器打开图像文件时,我看到里面是base64编码的字符串。在将字符串写入desk之前,是否需要先转换字符串?

问题在于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');
});

从中获得了大部分代码。

您使用的是哪种FileReader实现?不确定我使用的是Chrome 18。经过一番挖掘,似乎DataURL前面有一些我需要删除的元数据。是的,这也是我发现的(我自己也面临类似的问题)。可能拆分后再进行base64解码可以解决此问题。