FileReader.readAsDataURL upload to express.js
express, javascript, node.js
Solution
The problem was that a DataURL is prepended by meta data. You first need to remove that part before you create a base64 buffer.
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');
});
Got most code from this question.
Problem
I have the following code to upload to my Node.js/Express.js backend. ``` var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function (e) { var result = http.post('/files', e.target.result); result.success(function () { alert('done'): }); } ``` My route looks like: ``` app.post('/files', function (req, res) { var cws = fs.createWriteStream(__dirname + '/media/file'); req.pipe(cws); res.send('success'); }); ``` When I open /media/file with an image app I get a warning that it cannot read it. When I open the image file with a text-editor I see the base64 encoded string inside. Do I need to convert the string first before writing it to desk?