Как определить, имеет ли имя файла знак плюс (+)?

Так 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

4

Решение

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

+ Символ несет это значение только тогда, когда часть строки запроса. На пути это должен был быть истолкован буквально.

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

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

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]