在AWS Lambda上将主体的multipart/form-data解析为字符串 [英] Parse multipart/form-data from body as string on AWS Lambda

查看:97
本文介绍了在AWS Lambda上将主体的multipart/form-data解析为字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很高兴请参阅 AWS现在支持multipart/form -数据在AWS Lambda上,但是现在原始数据在我的lambda函数中,我该如何处理它?

I'm glad to see AWS now supports multipart/form-data on AWS Lambda, but now that the raw data is in my lambda function how do I process it?

我看到 multiparty 是Node中用于多部分处理的很好的多部分库,但是它的构造函数期望请求,而不是原始字符串.

I see multiparty is a good multipart library in Node for multipart processing, but its constructor expects a request, not a raw string.

我在Lambda函数上收到的输入消息(在应用了人体贴图模板之后)是:

The input message I am receiving on my Lambda function (after the body mapping template has been applied) is:

{ "rawBody": "--ce0741b2-93d4-4865-a7d6-20ca51fe2689\r\nContent-Disposition: form-data; name=\"Content-Type\"\r\n\r\nmultipart/mixed; boundary=\"------------020601070403020003080006\"\r\n--ce0741b2-93d4-4865-a7d6-20ca51fe2689\r\nContent-Disposition: form-data; name=\"Date\"\r\n\r\nFri, 26 Apr 2013 11:50:29 -0700\r\n--ce0741b2-93d4-4865-a7d6-20ca51fe2689\r\nContent-Disposition: form-data; name=\"From\"\r\n\r\nBob <bob@mg.mydomain.io>\r\n--ce0741b2-93d4-4865-a7d6-20ca51fe2689\r\nContent-Disposition: form-data; name=\"In-Reply-To\"\r... 

etc和一些文件数据.

etc and some file data.

我正在使用的人体贴图模板是

The body mapping template I'm using is

{
  "rawBody" : "$util.escapeJavaScript($input.body).replaceAll("\\'", "'")"
}

如何解析此数据以使发布到Lambda函数中的字段和文件获得访问权限?

How can I parse this data to acecss the fields and files posted to my Lambda function?

推荐答案

这对我有用-使用 busboy

应归功于>从Buffer解析multipart/form-data在Node.js 中,我从中复制了大部分内容.

credits owed to Parse multipart/form-data from Buffer in Node.js which I copied most of this from.

const busboy = require('busboy');

const headers = {
  'Content-Type': 'application/json',
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Methods': 'OPTIONS, POST',
  'Access-Control-Allow-Headers': 'Content-Type'
};

function handler(event, context) {
  var contentType = event.headers['Content-Type'] || event.headers['content-type'];
  var bb = new busboy({ headers: { 'content-type': contentType }});

  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', data => console.log('File [%s] got %d bytes', fieldname, data.length))
    .on('end', () => console.log('File [%s] Finished', fieldname));
  })
  .on('field', (fieldname, val) =>console.log('Field [%s]: value: %j', fieldname, val))
  .on('finish', () => {
    console.log('Done parsing form!');
    context.succeed({ statusCode: 200, body: 'all done', headers });
  })
  .on('error', err => {
    console.log('failed', err);
    context.fail({ statusCode: 500, body: err, headers });
  });

  bb.end(event.body);
}

module.exports = { handler };

这篇关于在AWS Lambda上将主体的multipart/form-data解析为字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆