【发布时间】:2012-03-04 02:46:22
【问题描述】:
我一直在创建 Presigned HTTP PUT URL,一切都很好,直到我想开始在 S3 中使用“文件夹”;我希望键具有字符“/”。
现在,当我发送 HTTP PUT 请求时,我得到 Signature doesn't match,因为“/”可能更改为 %2F...如果我在创建预签名 URL 之前转义字符,效果很好,但是亚马逊控制台管理不理解它并将其显示为一个文件而不是子文件夹。
有什么想法吗?
附言
HTTP PUT 请求是使用带有 POCO NET 库的 C++ 发送的。
编辑
我正在使用从 C++ 到我的 Java Web 服务器的 Poco HttpRequest 来生成签名的 url(在响应中返回)。
然后,C++ 使用此 url 再次使用 Poco 将文件放入 s3。
问题是从 Web 服务器返回的 url 是通过 Poco URI 对象解析的,这些对象自动解码了 s3 对象密钥,从而改变了它。
考虑到这一点,我能够解决我的问题。
【问题讨论】:
-
大概你的意思是来自POCO C++ libraries的 Network 库(即 Poco::Net 命名空间)?
-
这可能是您的代码或您正在使用的库中的错误,因为我使用 ruby 和 AWS-SDK ruby 包构建了 URL 和表单,因此我将预签名的 https 放入“文件夹”S3。
-
@Chook:实际上是使用哪个通道将AWS Java SDK生成的预签名URL依次传递给C++(背景见my answer最后一段)?