Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parse multipart/form-data from Buffer in Node.js

I have a Buffer which I know is a multipart/form-data payload, and I also know the HTTP Content-Type header in advance, which includes the boundary.

There are modules such as node-formidable which work only on http request streams, so what I'm interested in is how to parse a multipart payload synchronously?

like image 318
0x8890 Avatar asked Aug 25 '15 13:08

0x8890


1 Answers

Looking at the source for formidable's form.parse(), you should be able to do mimic most of what it's doing internally.

Another solution might be to use something like busboy which gives you a plain old parser stream to write to, so you might end up with something like:

var Busboy = require('busboy');
var bb = new Busboy({ headers: { 'content-type': '....' } });

bb.on('file', function(fieldname, file, filename, encoding, mimetype) {
  console.log('File [%s]: filename=%j; encoding=%j; mimetype=%j',
              fieldname, filename, encoding, mimetype);
  file.on('data', function(data) {
    console.log('File [%s] got %d bytes', fieldname, data.length);
  }).on('end', function() {
    console.log('File [%s] Finished', fieldname);
  });
}).on('field', function(fieldname, val) {
  console.log('Field [%s]: value: %j', fieldname, val);
}).on('finish', function() {
  console.log('Done parsing form!');
});

bb.end(someBuffer);
like image 149
mscdex Avatar answered Sep 21 '22 19:09

mscdex