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?
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);
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With