Так 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
Я энтузиаст AWS, я должен признать, что первоначальные архитекторы S3 сделали крайне неудачную ошибку, когда решили, что +
в пути URL должен интерпретироваться как если бы он был эквивалентен ASCII 0x20 («пробел»).
+
Символ несет это значение только тогда, когда часть строки запроса. На пути это должен был быть истолкован буквально.
В пути правильно закодированного и интерпретированного URL, +
эквивалентно %2B
,
Таким образом, нет надежного ответа на этот вопрос из-за фундаментального недостатка, который заставляет S3 неправильно обрабатывать правильные URL-адреса.
Учитывая тот факт, что если пример URL-адреса использовался браузером, S3 предположил бы, что это пробелы, вашим интересам, вероятно, лучше всего было бы не преобразовывать URL-адрес для использования. %2B
но лучше использовать его как есть во взаимодействии с S3 … если практический опыт не предполагает, что первоначальный источник этих URL-адресов действительно взаимодействовал с S3 и действительно преобразовал их в %2B
без сохранения их для последующего использования с согласованным кодированием, и в этом случае можно утверждать, что они предоставляются вам неправильно, но вам, возможно, придется преобразовать их в любом случае по причинам, которые могут быть скорее политическими, чем техническими.
Но, как вы уже подозреваете, ответ не так прост.
Других решений пока нет …