8

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?

1

1 Answer 1

12

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); 
Sign up to request clarification or add additional context in comments.

1 Comment

Using this i get a "done parsing form" but no "fields" or "data" is parsed. I'm using a buffer provided by github.com/CollectionFS/Meteor-http-methods and the POST is being sent by mailgun " Sample POST" WebHook test. any ideas?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.