2016-05-25 24 views
1

私はユーザーが画像をラムダ関数にアップロードして処理させようとしています。ゲートウェイAPIインターフェイスを使用します。ゲートウェイAPIを使用して画像をLambdaにアップロード

私は私のPOSTメソッドのためのモデルを指定しようとしたが、これまでのところ、私は無効なモデルが指定されたエラーに

を得続ける:検証結果:警告:[]、エラー:[指定された無効なモデルスキーマ]

...あまり役に立ちません。

生データをラムダに直接送信することはできず、なんらかの種類の書式設定を使用する必要があることを理解します。

私が理解したことは、ゲートウェイインタフェースbase64でデータをエンコードすることができるということです。

は、私がどのように画像を送信するためにコンテンツの種類image/jpeg

{ 
    "body" : $util.base64Encode($input.body) 
} 

と、次のモデルスキーマを使用して、そうすることによって実行しようとしましたか?

+1

をアップロードしたバケットのPUTであなたのラムダ関数のためのトリガーを設定しAPI Gateway as an S3 proxy

  • を使用して画像をアップロードラムダ。 http://stackoverflow.com/questions/31645205/how-to-upload-file-to-lambda-function-or-api-gateway –

  • +2

    アップロードが必要になる前に、s3を使用しているか、またはbase64を実行しているようです。 Base64はより多くの帯域幅を消費し、s3は追加のリクエストを実行するように強制します... – Antzi

    +0

    '$ util.base64Encode($ input.body)'を引用符で囲むことで、 "body": "$ util.base64Encode($ input。体) "。しかし、コード化されたデータは壊れており、役に立たない。 – advncd

    答えて

    2

    あなたが見たようにバイナリデータ用のAPIゲートウェイにネイティブサポートはありません。私たちはこれに取り組んでいますが、私はあなたにETAを持っていません。あなたの質問にあるように、一部の顧客はデータを成功裏にbase64でエンコードしていますが、それは統合依頼ではなく、メソッドリクエストのマッピングテンプレートにある必要があります。

    コンテンツタイプをimage/jpegに設定した場合、受信したリクエストのContent-Typeヘッダーもimage/jpegである場合にのみエンコードが適用されるため、必ず設定してください。

    またないが推奨値に「リクエストボディのパススルー」(APIでpassthroughBehavior)を設定することで、右のコンテンツタイプを送る行う方法に着信要求を拒否することができます(「定義されたテンプレートが存在しない場合APIで」または 『WHEN_NO_TEMPLATES』)パススルー行動のための

    ドキュメント - >https://docs.aws.amazon.com/apigateway/api-reference/resource/integration/#passthroughBehavior

    +0

    私は、pngイメージをbase64エンコードしてラムダに送ることができました。ラムダはそれを解読し、s3のどこかにイメージを格納します。しかしそのイメージは壊れています。 つまり、 'base64Encode'はバイナリデータに対して正しく動作しません。あなたの顧客の何人がデータをコード化して成功したのかよくわかりません... – advncd

    1

    それはバイナリデータでの作業のように思えるし、APIゲートウェイは、私はあなたがすべきだと思う、複雑ですので:

    1. あなたがよりよい解決策はS3に画像をアップロードし、その後でそれを処理することであろう画像
    関連する問題