2016-04-06 21 views
3

私はイベントで入力キーを使ってs3からファイルを取り出し、それをクライアントに送る必要があるラムダ関数を持っています。私はcontext.succeedにこの約束(バッファ)の応答を送信する場合、それはフロントエンドにJSON配列として表示され AWS LambdaとAWS API Gateway:バイナリファイルの送信方法

S3
function getObject(key){ 
    var params = { 
    Bucket: "my_bucket", 
    Key: key 
    } 
    return new Promise(function (resolve, reject){ 
    s3.getObject(params, function (err, data){ 
     if(err){ 
     reject(err); 
     } 
     resolve(data.Body) 
    }) 
    }) 
} 

からファイルを取得するには、以下の機能を使用しています。どうすればファイルとして送信できますか?ファイルは、ZIPまたはHTTPアーカイブ(HAR)ファイルのいずれかです。 s3キーには適切な拡張子が含まれています。私はそれがAPI Gatewayの "Integration Response"と何か関係があると推測しています。しかし、変更する場所を特定できない

+0

このスレッドの公式のAWS回答を読む:https://forums.aws.amazon.com/thread.jspa?thread.jspa?threadID=195218 –

+1

API Gatewayチーム - Mark Bが正式なステータスです。今後バイナリパススルーをサポートするよう努めていますが、ETAはありません。 –

+0

には、このための回避策があります。我々の完全なアプリケーションはサーバレスです。ダウンロード目的のために個別のEC2インスタンスを作成しないようにしたいと考えています –

答えて

4

良いニュースは、APIゲートウェイ(announcementdocumentation)のバイナリ入力と出力を処理できるようになりました。

ラムダ関数では基本的に何も変わりませんが、contentHandling API Gateway IntegrationプロパティをCONVERT_TO_BINARYに設定できるようになりました。

残念ながら、公式のAWSの例では、AWS Lambdaのサポートがまだ完了していないようであるため、HTTP API Gatewayバックエンドのみが表示されます。たとえば、AWS Lambdaからgzipされたコンテンツを返すことはできませんでしたが、新しいバイナリサポートと$util.base64Decode()マッピングユーティリティのおかげで可能になるはずです。

+0

いくつか例を挙げてください。私はAWSの初心者です。現在、Lambdaにzipファイルをアップロードしようとしています。また、サーバーレスおよびサーバーレスのオフラインフレームワーク(開発用)を使用して、 – Marecky

関連する問題