2017-08-08 23 views
1

ファイルをアップロードするためのAPIを設定した後、画像(jpg)をアップロードする特別なケースがあり、 APIが、あなたは、次のエラーを取得:奇妙なことは、単純なテキストファイルをアップロードすると、まったく同じAPIコールで動作することで、その後、私は変更する必要が唯一のものはAWS APIゲートウェイを使用して画像をアップロードする方法ProxyとS3との統合

Content-Type 'text/plain' 

ある

The request signature we calculated does not match the signature you 
provided. Check your AWS Secret Access Key and signing method. 
Consult the service documentation for details. 
The Canonical String for this request should have been 
'PUT /test/vi-dummy-bucket/testImg2.jpg 
content-type:application/x-www-form-urlencoded 
host:qhweyos7z2.execute-api.us-west-1.amazonaws.com 
x-amz-date:20170808T154441Z 
x-amz-security-token: // security token string no quotes 
content-type;host;x-amz-date;x-amz-security-token 5fa90f0 ...' 
The String-to-Sign should have been 
'AWS4-HMAC-SHA256\n20170808T154441Z 
20170808/us-west-1/execute-api/aws4_request 
f7a38fa ...' 

とリクエストの生の部分にテキストを書きます。

コンテンツタイプの問題かリクエストボディの問題であるかどうかはわかりませんが、すべてを作業状態(本文のテキスト/プレーン&テキスト)にして、本文をバイナリに変更してイメージを設定すると、私は上記のエラーを取得します。

  • マイAPIゲートウェイは、米国西部-1地域
  • マイS3バケットは、私たち-東-1地域

であると私は使用していますリクエストは次のとおりです。

PUT /test/vi-dummy-bucket/testImg2.jpg HTTP/1.1 
Host: qhwe7z2.execute-api.us-west-1.amazonaws.com 
Content-Type: application/x-www-form-urlencoded 
X-Amz-Security-Token: FQoDYX ... 
X-Amz-Date: 20170808T154441Z 
Authorization: AWS4-HMAC-SHA256 
Credential=ASIAJICO6JFTJWN7A/20170808/us-west-1/execute- 
api/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz- 
security-token, 
Signature=6a792 ... Cache-Control: no-cache 
Postman-Token: e9d1f730-f50b-7e27-70cc-c15a138d8cc6 

これは別のバージョンのリクエストです(同じエラー):

PUT /test/vi-dummy-bucket/testImg2.jpg HTTP/1.1 
Content-Type: image/jpeg 
x-amz-security-token: FQoDY ... 
x-amz-date: 20170808T190134Z 
Authorization: AWS4-HMAC-SHA256 
Credential=ASIAIZSP5YKVLJ3GVVQA/20170808/us-west-1/execute- 
api/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz- 
security-token, 
Signature=b2324 ... 
Host: qhos7z2.execute-api.us-west-1.amazonaws.com 
Connection: close 
User-Agent: Paw/3.1.2 (Macintosh; OS X/10.12.6) GCDHTTPRequest 
Content-Length: 823236 

--- --- UPDATE

生成SDKを使用して手動sigining sigV4を実施した後、署名は、もはや問題ではありません。

残っている唯一の問題は、生成されたSDKが文字列を "本体"として受け入れることで、ファイルをバイナリ文字列に変換する必要があることです。次に、それは正しく渡され、ファイルはS3で作成されますが、バイナリ文字列がバイナリファイルに変換されなかったかのように、サイズは現在倍になり、表示されません。だからこそ...

私はすでにPASSTHROUGHとCONVERT_TO_BINARYを試しました。

答えて

1

更新:これは、郵便配達員の既知のエラーに関連しているようです。 AWS Signature Error using Postman to access the AWS API Gateway when posting a binary

、ここではポストマンのためのバグレポートです:あなたはcurlhttpieのような代替残りのクライアントおよび/またはコマンドラインユーティリティを使用している場合https://github.com/postmanlabs/postman-app-support/issues/3232

が要求作業を行い参考のためにここにSO関連の質問です?


あなたはおそらく、あなたが送っているバイナリコンテンツと一致するようにContent-Typeを設定する必要があり、バイナリサポートを設定した場合。

私は別のContentと同じことをしようとしたあなたはContent-Type application/x-www-form-urlencodedとのバイナリコンテンツを送っている掲載しましたが、体が実際にバイナリjpegファイルであれば、私はあなたがContent-Type image/jpeg

+0

を送信する必要があることを期待するものから、タイプは、私が最後に試したものです。 ^^ – WilliamX

関連する問題