Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9007

Lambda&Serverless Frameworkで、multipart/form-data形式でデータを受け取る

$
0
0

前書き

最近業務でAWSのLambdaとServerless Frameworkを使うことが多いです。
業務の流れが早く、次から次へと新しいツールを触ってすべて忘れていきそうなので、個人的なまとめとして、記事を作成します。
言語はnode.js, TypeScriptを使用しています。

multipart/form-dataとは?

multipart/form-dataは、前述の通り複数の種類のデータを一度に扱える形式で、主な利用シーンはHTMLフォームです。特にファイルアップロードでよく利用されます。
引用元:
[フロントエンド] multipart/form-dataを理解してみよう
https://www.yoheim.net/blog.php?q=20171201

ボディはBoundaryという区切り文字で、ファイル送信時に指定したnameごとに区切られます。

------WebKitFormBoundaryO5quBRiT4G7Vm3R7
Content-Disposition: form-data; name="message"

Hello
------WebKitFormBoundaryO5quBRiT4G7Vm3R7
Content-Disposition: form-data; name="file"; filename="a.txt"
Content-Type: text/plain

aaa
------WebKitFormBoundaryO5quBRiT4G7Vm3R7--

curl
curl -X POST -F file=@./sample.csv https~(Lambda関数のエンドポイント(URL)) --output output.csv

(引用元同じ)

serverless.tsでの設定

serverless.ts
constserverlessConfiguration:Serverless={service:{name:'sls-test',},frameworkVersion:'1',custom:{webpack:{webpackConfig:'./webpack.config.js',includeModules:true},// ここapiGateway:{binaryMediaTypes:['multipart/form-data']}},

これで、APIGatewayの設定→バイナリメディアタイプという欄に、multipart/form-dataが設定されるようになります。

Lambda関数内での処理

node.jsで、aws-lambda-multipart-parserというnpmモジュールを使って、multipart/form-data形式のデータを解析しています。
他の言語でも、「言語名 multipart/form-data」と調べれば、同じようなライブラリを検索できると思います。

handler.ts
// 受け取ったevent.bodyがbase64エンコードされているのでデコードevent.body=Buffer.from(event.body,'base64').toString('binary');// multipart/form-dataをパースするconstmultipartBuffer=Multipart.parse(event,true);// 再度base64エンコードされているのでデコードletdata:string=Buffer.from(multipartBuffer.file.content,'base64').toString('binary');

後書き

他にも、serverless-jest-pluginというnpmモジュールを使ってテストを構築する方法や、そもそもBufferについても勉強してまとめたいのですが、一旦止めておきます。

参考

serverlessを使ってLambdaにmultipart/form-dataでバイナリデータをアップロードする
https://qiita.com/YoukyMurakami/items/a1da42b394970979ad1e

base64ってなんぞ??理解のために実装してみた
https://qiita.com/PlanetMeron/items/2905e2d0aa7fe46a36d4

Node.jsのバッファについて
http://info-i.net/buffer#i-2


Viewing all articles
Browse latest Browse all 9007

Trending Articles