Closed6
API Gateway + Lambdaでファイルアップロードを実装
他のパラメータと同時にファイルアップロードするので、Content-Typeはmultipart/form-data
を使う。
ファイルだけアップロードならContent-Typeはそのファイルの形式にあわせたもの(image/png, application/xml) でよい。
リクエストヘッダーのContent-Typeがmultipart/form-data
の場合、ボディの各パートの種類はContent-Disposition
で指定される。
Lambdaハンドラのeventに渡されるデータは以下のような感じ、(samconfig.tomlをアップロードした例)
{
"resource": "/",
"path": "/",
"httpMethod": "GET",
"requestContext": {
"resourcePath": "/",
"httpMethod": "GET",
"path": "/Prod/",
...
},
"headers": {
"Content-Type": multipart/form-data; boundary=------------------------82d580069494b055,
...
},
"pathParameters": null,
"stageVariables": null,
"body": "--------------------------820be70beac2b839
Content-Disposition: form-data; name="projectName"
testproject
--------------------------820be70beac2b839
Content-Disposition: form-data; name="fileName"; filename="samconfig.toml"
Content-Type: application/octet-stream
version = 0.1
[default]
[default.deploy]
[default.deploy.parameters]
stack_name = "serverless-openapi-demo-app"
s3_bucket = "aws-samxxxxxxx"
s3_prefix = "serverless-openapi-demo-app"
region = "us-east-1"
confirm_changeset = false
capabilities = "CAPABILITY_IAM"
--------------------------820be70beac2b839--",
...
}
全てのパートのdelimiterはCRLF "--" boundary
でボディの最後のdelimiterだけはCRLF -- boundary --
となる
Pythonでmultipart/form-data
をパースする場合、標準ライブラリのcgi.FieldStorage
を使ってできる。
API Gateway 全体のわかりやすい解説
このスクラップは2021/01/19にクローズされました