Content-Type:multipart/form-dataでリクエストをAPI Gatewayに送信することは可能ですか?
私の場合、Postman経由で以下のようなフォームデータを送信しようとしています。
user[email]:[email protected]
user[password]:password
user[password_confirmation]:password
user[username]:testUser
しかし、APIGatewayはコンテンツを失っているようです。
application/x-www-form-urlencodedまたはapplication/jsonとして送信すると、すべて正常に機能します。
mulipart/form-dataの使用は、特にmulipart/form-dataを介してファイルを送信しようとする場合、AWS APIGatewayでは完全にはサポートされていません。
フォームから他のデータと一緒に画像を送信するには、おそらく最良の解決策は、画像がbase64でエンコードされているJSONとして送信することです。
たとえば、誰かが送信したい場合:
アバターはbase64でエンコードする必要があります。次のように、画像をテキストとして表示します。
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyA...
POSTメッセージの内容は次のようになります:
{
"user_account": {
"avatar": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyA...",
"username": "my name"
}
}
APIゲートウェイ
API Gatewayで、APIの下でModelsを開き、新しいモデルを作成します。たとえば、serAccount:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "UserAccountUpdate",
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"avatar": { "type": "string" },
"username": { "type": "string" }
}
}
}
}
In メソッドリクエスト-> HTTPリクエストヘッダーセット:Content-Type
。
In メソッドリクエスト-> リクエストボディセット:application/json
そしてモデルの使用として作成されたserAccountモデル。
統合リクエスト-> コンテンツ処理として設定:パススルー。
統合リクエスト-> ボディマッピングテンプレート選択:reuqest Content-Typeヘッダーに一致するテンプレートがない場合。 (ここで他の2つのオプションを使用して、追加のマッピングテンプレートを設定することもできます)。
バックエンド
バックエンドは、base64でエンコードされたテキストとして画像を受け取ります。したがって、おそらくそれ以上使用する前に、テキストから画像にデコードする必要があります。
Base64を使用した画像のエンコード/デコードは非常に人気があるため、フレームワークに適切なツール/ライブラリを見つける必要があります。
Content-Type:multipart/form-data to API Gatewayを使用してリクエストを送信する場合は、元のContent-Typeヘッダーを統合エンドポイントに渡す必要があります。
aws apigateway update-integration \
--rest-api-id a1b2c3d4e5 \
--resource-id a1b2c3 \
--http-method POST \
--patch-operations op='replace',path='/requestParameters/integration.request.header.Content-Type',value='method.request.header.Content-Type'