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

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

1 ответ

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

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

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

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

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

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

Другие вопросы по тегам