【问题标题】:Amazon S3 object with special characters throws error?带有特殊字符的 Amazon S3 对象会引发错误?
【发布时间】:2011-08-25 07:33:44
【问题描述】:

我使用https://github.com/tpyo/amazon-s3-php-class 来存储和检索对象。如果对象包含没有特殊字符的正常名称,它工作正常。但是如果对象包含 [] 字符(如 [test].jpg 我只测试过为此),如果我使用 getobject 方法,它将引发错误 NoSuchakey。

如果我直接获取 S3 URL 并粘贴到浏览器中,我可以下载图像。

但是我想使用getobject方法。那么如何避免这个错误。我不想改变原来的对象名称。

编辑:

PHP 版本 5.2.6

【问题讨论】:

  • 你忘记申请URL encoding了吗?
  • $rest = new S3Request('GET', $bucket, $uri) 这里我需要应用 URL Encode 吗?
  • nvm,它已经用rawurlencode($uri)为你做了这件事

标签: php amazon-s3


【解决方案1】:

我在 php.net 上的 rawurlencode 的 cmets 中看到了这个注释:

phpversion()>=5.3 将符合 RFC 3986,而 phpversion()

相关 RFC 的历史:

RFC 1738 第 2.2 节仅限字母数字,特殊字符 “$-_.+!*'()”,以及用于其保留的保留字符 可以在 URL 中使用未编码的用途。

RFC 2396 section 2.3 unreserved = alphanum |标记标记=“-” | "_" | “。” | “!” | "~" | "*" | "'" | "(" | ")"

RFC 2732 第 3 (3) 节将“[”和“]”添加到“保留”集合中 字符:

RFC 3986 第 2.3 节未保留 = ALPHA / DIGIT / "-" / "." /“_”/ “~”

RFC 3987 第 2.2 节未保留 = ALPHA / DIGIT / "-" / "." /“_”/ “~”

以下代码在 5.3.2 和 5.2.15 上产生相同的输出:

<? echo rawurlencode ("[hello]") . "\n\n"; ?>
%5Bhello%5D

您能否尝试创建S3.php 的副本并更改S3Request 以修改$this-&gt;url

$this->uri = $uri !== '' ? '/'.str_replace('%2F', '/', rawurlencode($uri)) : '/';
$this->url = str_replace("%5B", "[", $this->url);
$this->url = str_replace("%5D", "]", $this->url);

【讨论】:

  • 谢谢 steve-0。它不起作用。而且我的 PHP 版本是 5.2.6
猜你喜欢
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 2018-04-26
  • 2021-03-06
  • 2021-04-30
  • 1970-01-01
相关资源
最近更新 更多