【问题标题】:FileReader.readAsDataURL upload to express.jsFileReader.readAsDataURL 上传到 express.js
【发布时间】:2012-10-25 22:30:52
【问题描述】:

我有以下代码要上传到我的 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 编码的字符串。在将字符串写入桌面之前是否需要先转换字符串?

【问题讨论】:

  • 您使用的是哪个 FileReader 实现?
  • 不确定我使用的是哪一个 Chrome 18。经过一番挖掘后,似乎 DataURL 前面有一些我需要删除的元数据。
  • 是的,这也是我想出来的(我自己也面临着类似的问题)。可能一个拆分后跟一个 base64-decode 解决了这个问题。

标签: javascript node.js express


【解决方案1】:

问题在于 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 获得大部分代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2022-06-22
    • 2021-10-15
    • 2019-06-25
    • 2021-10-21
    相关资源
    最近更新 更多