2016-05-07 21 views
8

私はAPI gatewayLambdaのREST APIを持っています。 プロファイルピクチャをアップロードするためのエンドポイントを作成しないでください。ファイルをLambda関数に渡し、サイズを変更してデータベースに登録し、新しいイメージのURLパスを返します。Amazon APIゲートウェイとラムダ経由で画像をアップロード

これらのサービスではどのような方法がありますか? オンラインで何も見つけられませんでした(私が見つけた唯一の提案は、IAM権限を必要とするS3に直接アップロードし、画像のサイズを変更するラムダ機能をトリガーするイベントを持つことです)。

おかげ

UPDATE

AWS更新APIGATEWAYとは、必ずしもあなたがsend binaries through an endpoint
おかげS3に直接ファイルをアップロードすること

+2

APIゲートウェイは現在バイナリデータをサポートしています... – Manzo

+1

はい、ここの例:https://aws.amazon.com/blogs/compute/binary-support-for-api-integrations-with-amazon-api-gateway/ – balu

答えて

3

をコメントするために@blueと@Manzoすることができていません知っていますIAM権限が必要です。 pre-signed S3 URLを返すAPIエンドポイントを作成し、そのファイルをS3に直接アップロードすることができます。 APIエンドポイントの背後にあるラムダ機能は、S3バケットに対する正しいIAM権限を必要とする唯一のものです。

+6

あなたは正しいですが、私は自分のラムダ関数を持っていて、そのユーザーに権限を与えています。彼のIDによると、ファイルはs3バケットに保存されます。私はユーザーがs3のURLを取得し、ファイルをアップロードすることは良い考えではないと思う、APIのポイントはロジックとインフラストラクチャを抽象化することであり、ユーザーはこれらのすべてのものを扱うべきではなく、またはaws –

1

API GatewayとLambdaは現在ネイティブでサポートしていないため、API64にエンコードされた画像にファイルを渡してから、Lambda関数に渡すことができます。ラムダ関数は、ベース64のデコードを行い、サイズを変更してデータベースに登録し、新しい画像のURLパスを返すことができます。

+0

ありがとう。私はあなたが言ったことを試みました。私は '要求ボディをjsonに解析できませんでした:認識できないトークン'を取得しています。私の '要求テマプレート'には、 'payload:$ input.body'という小道具があります。それは本体(ファイル)を文字列として返しますが、代わりにエラーをスローします。 –

+0

修正済み! '$ util.base64Encode()'を追加してください。小道具は以下のようになります: '' payload ': "$ util.base64Encode($ input.body)" '。 –

+0

これでファイルが破損しました。それは 'application/octet-stream'にあります。私は画像の種類を操作したり決定することはできません。それに対する解決策はありますか? –

関連する問題