2016-09-17 17 views
-1

クライアントに渡すための事前署名済みURLリンクを生成しようとしています。ファイルにスペースが含まれていない限り、私のロジックは素晴らしいです。ただし、「指定されたキーは存在しません」というメッセージが表示されます。エラー。スペース付きファイルの事前署名S3 URLの生成

明確にするために、URL自体を取り出して解析しています。私はそれを得るときに、キーは次のようになります。

だから、
mybucket/my+file+with+spaces.pdf 

を、S3 SDKはプラスを取るように表示され、リンクがクリックされたときに%2bにそれらをURLエンコードするので、それは認識されませんパス。 '+'をつけてリンクを書き直すと、次のエラーが表示されます。

The request signature we calculated does not match the signature you provided. Check your key and signing method.

答えて

0

まあ、自分の質問に対する答えを見つけました。 +を ""と置き換えるだけで正しい結果が得られます。

objectKey = file.replace("+", " "); 
+0

S3は10年間そのようにされているため、おそらく修正できないいくつかの奇妙なURLのエンコードを行います。元のURLのどこに '+'の記号を付けていますか?あなたの解決策は機能しているかもしれないが、不完全であるかもしれないので、私は尋ねる。 –

+0

@ Michael-sqlbotコメントありがとう!別のアプリケーションからのイベントでURLを取得しています。そのアプリケーションは暗号化された場所にドキュメントをアップロードし、そのイベントを私に渡します。私は、docリンクを抽出し、期限切れのリンクを生成します。あなたはそれに何か問題を見ますか? – RockyMountainHigh

+2

url-escapingのデコードを行うライブラリを使用し、そこを通過する値を渡すべきでしょう。もしファイル名に実際に '+'が含まれていれば、他のアプリから '%2B'が送られてくるはずですが、SDKに渡すと'%252B'としてS3に送られます( '%' 25 ')も破られており、受信したパーセント符号化された他のリテラルについても同様である。受け取った値にurl-decodingを使用すると、これを正常に戻して、SDKが正常に動作するようにする必要があります。だから私はあなたの修正があなたが今までに見た1つの問題だけを修正すると思うのです。 –

関連する問題