如何确定文件名中是否有加号 (+)?

5 php buckets amazon-s3 amazon-web-services aws-sdk

因此AWS将空格转换+为存储桶/文件 URL。但是其中已有的文件名+被编码为%2B. 我很困惑如何处理这个案子。

当应用程序的输入 URL 为:

https://s3-us-west-2.amazonaws.com/mybucket/Pul0419_32_a+b.zip
Run Code Online (Sandbox Code Playgroud)

我如何确定实际存在的文件是Pul0419_32_a+b.zip还是Pul0419_32_a b.zip

Mic*_*bot 5

我是 AWS 爱好者,我不得不承认,当 S3 的原始架构师决定将+URL 的路径解释为相当于 ASCII 0x20(“空格”)时,他们犯了一个非常不幸的错误。

+字符仅在作为查询字符串的一部分时才带有此含义。在路径中,它应该按字面解释

在正确编码和解释的 URL 的路径中,+相当于%2B.

因此,这个问题没有可靠的答案,因为导致 S3 错误处理正确 URL 的根本缺陷。

鉴于如果示例 URL 被浏览器使用,S3 会假设这些是空格,那么最好不要转换 URL%2B以使用它,而是在与 S3 的交互中按原样使用它,从而最好地满足您的兴趣。 . 除非实践经验表明这些 URL 的原始来源实际上已经与 S3 交互并且确实将它们转换为%2B没有存储它们以供后续使用一致的编码使用,在这种情况下,可以认为它们提供给您是错误的,但是无论如何,您可能必须改造它们,原因可能更多是政治而非技术。

但是,正如您已经怀疑的那样,答案并不简单。