- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在创建预签名的 HTTP PUT URL,在我想开始在 S3 中使用“文件夹”之前,一切都运行良好;我希望 key 具有字符“/”。
现在我收到 Signature doesn't match when I send the HTTP PUT requests due to the fact the fact'/' probably changes to %2F... Amazon 控制台管理不理解它并将其显示为一个文件而不是子文件夹。
有什么想法吗?
附言
使用带有 POCO NET 库的 C++ 发送 HTTP PUT 请求。
编辑
我正在使用 C++ 中的 Poco HttpRequest 到我的 Java Web 服务器来生成签名的 url(在响应中返回)。
然后 C++ 使用此 url 再次使用 Poco 将文件放入 s3。
问题是从 Web 服务器返回的 url 是通过 Poco URI 对象解析的,Poco URI 对象自动解码 s3 对象键从而更改它。
考虑到这一点,我能够解决我的问题。
最佳答案
棘手 - 我将尝试自下而上地处理这个问题。
免责声明:我目视检查 Poco 库而不是实际调试代码示例,这应该会更快地产生更可靠的结果,见下文;)
If I escape the character before creating the presigned URL it worksgreat, but then the Amazon console management doesn't understand itand shows it as one file instead of subfolders.
后者源于 S3 实际上在存储级别上没有文件夹的概念,参见例如Index Document Support 中的索引文档和文件夹部分:
Objects stored in Amazon S3 are stored within a flat container, i.e.,an Amazon S3 bucket, and it does not provide any hierarchicalorganization, similar to a file system's. However, you can create alogical hierarchy using object key names and use these names to inferlogical folders that contain these objects.
这正是 AWS Management Console 的内容也在这里做:
The AWS Management Console also supports the concept of folders, byusing the same key naming convention used in the preceding sample.
但是,您关于假设 /
被编码为 %2F
的测试证明,这确实是 Poco 的方式: :Net 在执行 HTTP PUT 请求时对 URL 进行编码。
/
和 %2F
生成不同的 URL,这让我感到有些惊讶,到目前为止,关于 Why is my S3 pre-signed request invalid when I set a response header override that contains a “+”? 的最新分析似乎表明 AWS .NET SDK 的相应规范化,有关详细信息,请参见下文。)为了让您的方案按预期工作,您需要弄清楚 URL 在哪里以这种方式编码 - 我原则上可以想到两个组件:
找出为什么 Poco::Net 对不同于 S3 的 URL 进行编码(如果有的话,请参见下文)最好通过调试您的代码来完成,我将从这里开始:
类 HTTPRequest使用类 URI反过来,自动对传递给它的所有 URI 和 URI 部分执行一些规范化,特别是百分比编码的字符被解码。反过来由方法处理 encode() ,这是事情变得有趣并需要断点的地方,请参阅URI.cpp :
/
(请参阅第 47 行,了解正在使用的各个常量)你还没有指定,实际上是用哪个 channel 将AWS Java SDK生成的预签名URL依次传递给C++。考虑到 Poco::Net 功能的代码审查(请注意,仅目视检查,我自己还没有调试过)得出的结论是,在库本身中没有发现明显的违规者,因此它似乎更有可能已经编码进入您的 C++ 层(当然可以通过调试轻松验证)- 例如,您是否偶然在这些组件之间使用任何类型的 Web 服务?
祝你好运!
关于amazon-s3 - 使用 Amazon Java SDK 和额外/字符的 Amazon S3 预签名 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9247995/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
为什么在 C# 中添加两个 char 结果是 int 类型? 例如,当我这样做时: var pr = 'R' + 'G' + 'B' + 'Y' + 'P'; pr 变量变为 int 类型。我希望它是
下面的代码可以编译,但 char 类型的行为与 int 类型的行为不同。 特别是 cout ::ikIsX >() ::ikIsX >() ::ikIsX >() using names
我正在寻找一个正则表达式,它可以匹配长度为 1 个或多个字符但不匹配 500 的内容。这将在 Rails 路由文件中使用,特别是用于处理异常。 路线.rb match '/500', to: 'err
对于 C 编程作业,我正在尝试编写几个头文件来检查所谓的“X 编程语言”的语法。我最近才开始,正在编写第一个头文件。这是我编写的代码: #ifndef _DeclarationsChecker_h_
为什么扩展的 ascii 字符(â、é 等)被替换为 字符? 我附上了一张图片...但我正在使用 PHP 从 MySQL 中提取数据,其中一些位置有扩展字符...我使用的是 Arial 字体。 您可以
我有一个与 R 中的断线相关的简单问题。 我正在尝试粘贴,但在获取(字符/数字)之间的断线时遇到问题。请注意,这些值包含在向量中(V1=81,V2=55,V3=25)我已经尝试过这段代码: cat(p
如何将 ANSI 字符 (char) 转换为 Unicode 字符 (wchar_t),反之亦然? 是否有用于此目的的任何跨平台源代码? 最佳答案 是的,在 中你有mbstowcs()和 wcsto
函数 fromCharCode 不适用于国际 ANSI 字符。例如,对于 ID 为 192 到 223 的俄语 ANSI (cp-1251) 字符,它返回特殊字符。如何解决这个问题? 我认为,需要将A
如果不喜欢,我想隐藏 id,但不起作用 SELECT * FROM character, character_actor WHERE character.id NOT LIKE character_a
现在这个程序成功地反转了键盘输入的单词。但是我想在我反转它之前“保存”指针中的单词,所以我可以比较两者,反转的和“原始的”,并检查它们是否是回文。我还没有太多经验,可能会出现比我知道的更多的错误,但我
Memcpy 和 memcmp 函数可以接受指针变量吗? char *p; char* q; memcpy(p,q,10); //will this work? memcmp(p,q,10); //w
恐怕我对一个相当过饱和的主题的细节有疑问,我搜索了很多,但找不到一个明确的答案来解决这个特定的明显-imho-重要的问题: 使用UTF-8将byte[]转换为String时,每个字节(8bit)都变成
我有一个奇怪的问题。我需要从 stat 命令打印输出字符串。 我已经编写了获取一些信息的代码。 import glob import os for file in glob.glob('system1
我正在使用 Java 并具有其值如下所示的字符串, String data = "vale-cx"; data = data.replaceAll("\\-", "\\-\\"); 我正在替换其中的“
String urlParameters = "login=test&password=te&ff"; 我有一个String urlParams,& - 是密码的一部分,如何使其转义,从而不被识别为分
大家好,我只想从此字符串中提取第一个字母: String str = "使 徒 行 傳 16:31 ERV-ZH"; 我只想获取这些字符: 使 徒 行 傳 并且不包括 ERV-ZH 仅数
这个问题已经有答案了: Crash or "segmentation fault" when data is copied/scanned/read to an uninitialized point
所以, 我有一个字符**;它本质上是一个句子,带有指向该句子中每个单词的指针;即 'h''i''\0''w''o''r''l''d''\0''y''a''y''!''\0' 在这种情况下,我希望使用可
这个问题在这里已经有了答案: Using quotation marks inside quotation marks (12 个答案) 关闭 7 年前。 如何打印 " 字符? 我知道打印 % 符号
我是一名优秀的程序员,十分优秀!