2016-04-20 3 views
3

So AWS преобразует пробел в + для URL-адреса ведра/файла. Но имя файла, которое уже имеет +, в нем закодировано как %2B. Я смущен, как справиться с этим делом.Как определить, есть ли в нем имя плюса (+)?

Когда вход URL для приложения:

https://s3-us-west-2.amazonaws.com/mybucket/Pul0419_32_a+b.zip 

как я решить, является ли файл, который на самом деле существует Pul0419_32_a+b.zip или Pul0419_32_a b.zip

+0

Вы можете попытаться получить URI информацию '$ _SERVER [ 'QUERY_STRING']' или '$ _SERVER [ 'REQUEST_URI']' – Dolbik

+0

@Dolbik Данные передаются в виде 'JSON' вместе с запросом' Post' –

+2

If вы 'urldecode()' имя файла из строки запроса, то все, что он выводит, будет тем, что вызывается именем файла. Он преобразует обратно '% 2B' в' + 'и' + 'в пробел. – Rasclatt

ответ

1

AWS энтузиаст, что я, я должен признать, что оригинальные архитекторы S3 сделали крайне неудачную ошибку, когда решили, что + на пути URL-адреса должны интерпретироваться так, как если бы они были эквивалентны ASCII 0x20 («пробел»).

Символ + несет этот смысл только в части строки запроса. На пути это should have been interpreted literally.

На пути правильно закодированного и интерпретируемого URL + эквивалентен %2B.

Существует, следовательно, надежный ответ на вопрос из-за фундаментального недостатка, который заставляет S3 неправильно обрабатывать правильные URL-адреса.

Учитывая, что, если URL-адрес примера использовался браузером, S3 предположил бы, что это были пробелы, ваши интересы, вероятно, будут лучше всего использоваться, не преобразовывая URL-адрес для использования %2B, а скорее использовать его как есть в взаимодействие с S3 ... если практический опыт не предполагает, что исходный источник этих URL-адресов фактически взаимодействовал с S3 и действительно преобразовал их в %2B, не сохраняя их для последующего использования с последовательной кодировкой, и в этом случае можно было бы аргументировать, что они будучи вам предоставлен неправильно, но вам, возможно, придется преобразовать их в любом случае по причинам, которые могут быть более политическими, чем технические.

Но, как вы уже подозреваете, ответ менее простой.