Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

FileReader.readAsDataURL upload to express.js

FileReader.readAsDataURL upload to express.js

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?

Problem courtesy of: Pickels

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.

Solution courtesy of: Pickels

Discussion

View additional discussion.



This post first appeared on Node.js Recipes, please read the originial post: here

Share the post

FileReader.readAsDataURL upload to express.js

×

Subscribe to Node.js Recipes

Get updates delivered right to your inbox!

Thank you for your subscription

×