私は、APIゲートウェイをS3のプロキシとして(カスタム認証のために)使用して問題に遭遇しました。既知の問題)。AWS API Gateway to S3 - PUTコンテンツエンコーディング.Zファイル
私は通常、.gzまたは.Z(Unix圧縮ユーティリティ)ファイルをアップロードしています。私が理解している限り、データはエンコードの問題のために維持されません。私はバイナリにデータをデコードする方法を理解していないようです。
オリジナル大手バイト:��9�W�
を...ファイル名とデータの残りが続く:\x1f\x8b\x08\x08\xb99\xbeW\x00\x03
API GWを通過した後。
'これを回避する'の1つの方法は、API GWへのPUTリクエストのヘッダーにContent-Encodingを 'gzip'として指定することです。これは、API GWがS3に転送する前にファイルを解凍するように強制しているようです。
Unix圧縮ユーティリティで圧縮された.Zファイルでは、同じことはできません。ここでContent-Encodingを 'compress'として指定する必要があります。
誰かがデータに何が起こっているのかについての洞察がありますか?また、API GWを使用している間にデータのエンコーディングを維持する(またはS3に入ったらデコードする)可能性のある回避策を知っている人はいますか?
明らかに私はS3 APIに直接アクセスすることができます(またはAPI APIにアクセスするための事前署名されたURLをAPI GWに返すようにしてもよい)が、私はそれをしたくない理由がいくつかあります。
私は、エンコードに関してはあまりよく分かりませんが、私の質問のいくつかに明白な答えがある場合は申し訳ありません。
ご回答ありがとうございます。私は現在、Content-Type 'application/x-gzip'のもののボディマッピングテンプレートで' $ util.base64Encode($ input.body) 'を使ってデータを変換する作業をしています(' application /圧縮する)。しかし、私は単純に変換してファイルに渡すことはできません。私はデフォルトの 'Method Request passthrough'テンプレートを使い、' $ util.base64Encode'を使って 'body-json'を変更しています。これで、JSONがファイルに格納されるだけです。 'body-json'フィールドには変換されたデータが含まれています。 – unclemeat
Nevermind - 他の情報/ jsonを持たずに '$ util.base64Encode($ input.body)'を実行するだけでよいことが分かります。再度、感謝します。 – unclemeat
私は、クライアント上でのエンコーディング、URLエンコードされたフォームとしての送信、ラムダ関数の入力パラメータからのデコードを考えていましたが、API Gatewayはあなたが行っていたことを喜んで気にせず、率直に言って、プラットフォームが8ビットのクリーンでオクテットに無関係でない限り、潜在的にはそれ以上の問題はないようです。 –