Как определить, имеет ли имя файла знак плюс (+)?
Так 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
без сохранения их для последующего использования с согласованным кодированием, и в этом случае можно утверждать, что они предоставляются вам неправильно, но вам, возможно, придется преобразовать их в любом случае по причинам, которые могут быть скорее политическими, чем техническими.
Но, как вы уже подозреваете, ответ не так прост.