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