在Node.js中从缓冲区解析multipart/form-data

8

我有一个缓冲区,我知道它是一个 multipart/form-data 负载,并且我事先知道 HTTP Content-Type 标头,其中包括边界。

有一些模块(如 node-formidable)仅适用于 http 请求流,因此我感兴趣的是如何同步解析多部分负载?


https://github.com/expressjs/multer - Alexandr Kazakov
1个回答

12

查看 formidableform.parse() 的源代码,你应该能够模仿它内部大部分的操作。

另一个解决方案可能是使用类似于busboy这样的工具,它可以提供给你一个普通的解析流来写入数据,所以你最终可能会得到以下内容:

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);

使用这个程序,我得到了一个“解析表单完成”的消息,但是没有解析出“字段”或“数据”。我正在使用由https://github.com/CollectionFS/Meteor-http-methods提供的缓冲区,并且POST是由mailgun“Sample POST” WebHook测试发送的。有什么想法吗? - kroe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接