2016-07-09 5 views
0

私はWPエンジンで自分のホスティングアカウントとAmazon S3を統合しました。 +文字を含むファイルを除いて、すべてがうまくいきます。 テスト+ 2.pdf http://support.mcsolutions.com/wp-content/uploads/2011/11/test+2.pdf =動作しません:ファイルの名前は、次の場合の例についてはAmazon s3 URL +%2にエンコードされていますか?

次のURLはアマゾンのURLです。 + charcterがエンコードされていることに注意してください。これを防ぐ/変更する方法はありますか? http://mcsolutionswpe.s3.amazonaws.com/mcsupport/wp-content/uploads/2011/11/test%2b2.pdf

その他のURLは正常に動作: アマゾン - >http://mcsolutionswpe.s3.amazonaws.com/mcsupport/wp-content/uploads/2011/11/test2.pdf ウェブサイト - >http://support.mcsolutions.com/wp-content/uploads/2011/11/test2.pdf

答えて

0

私が正しくあなたの質問を理解していれば、その後、いや、本当にこれを変更する方法はありません。

原因は、何年も前にS3上で行われた不幸な意思決定であるように見えます。オブジェクトのキーが送信されるURLのパス部分にURLエスケープ(「%エンコード」に限定されないが、これに限定されない)。クエリ文字列(?後で#で始まるフラグメント、もし存在するならば、前にURLのオプション部分)で

は、+文字が[SPACE]、(ASCII 12月32、六角は0x20)と等価であると考えています。

...しかし、URLのパスでは、これは当てはまりません。

...しかし、S3の実装では、です。

ので+が実際にそれが[SPACE]を意味し、+を意味するものではありません...そのため、+はまた違った表情が+を伝えるために必要であることを意味している... +を意味することはできません - と、その値が%2Bです、URLがエスケープされた値+(ASCII Dec 43、Hex 0x2B)。

+は、あなたが使用しているコードで変換されます(明らかにこのようなことを理解していると仮定すると)S3のフォーマットには(%2B)...と要求される必要がありますファイルをダウンロードするときに%2Bを使用してください。

奇妙なことですが、パスにスペースを入れてS3にファイルを保存すると、実際には+またはスペース、さらには%20で要求でき、これらの3つすべてが実際にファイルをフェッチするはずです。パス内の+があなたの望むものであれば、代わりにスペースを入れて問題を回避することができますが、回避策があれば、この回避策は「ハック」として記述することをお勧めします。この戦略は、S3の標準的な動作を無視して、代わりにあなたが望むように設計されていない限り、事前に署名されたGETのURLを生成するライブラリでは機能しません。ただし、公開リンクの場合は、

関連する問題