Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

FileReader.readAsDataURL upload to express.js

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?

like image 600
Pickels Avatar asked Oct 25 '12 13:10

Pickels


1 Answers

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.

like image 71
Pickels Avatar answered Nov 08 '22 10:11

Pickels