- 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/
这个问题在这里已经有了答案: Why don't Java's +=, -=, *=, /= compound assignment operators require casting? (11 个
我搜索了很多,但没有一个链接能帮助我解决这个问题。我得到了 ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s
我正在做 RegexOne 正则表达式教程,它有一个 question关于编写正则表达式以删除不必要的空格。 教程中提供的解决方案是 We can just skip all the starting
([\s\S]+|\s?) 中 |\s? 的目的或作用是什么?如果没有它,表达式会不会与 ([\s\S]+) 相同? 最佳答案 这不是完全相同的。 ([\s\S]+|\s?) 会匹配空字符串,而 ([
这个正则表达式有一组还是两组? 我正在尝试使用第二组访问 bookTitle 但出现错误: Pattern pattern = Pattern.compile("^\\s*(.*?)\\s+-\\s+
在 C 中给定一个字符串指针 s,下面的迭代会做什么?即它以什么方式遍历字符串? for (++s ; *s; ++s); 最佳答案 for (++s ; *s;++s) 表示 将指针 s 递增到字符
我正在用一个 node.js 应用程序解析一个大列表并有这段代码 sizeCode = dbfr.CN_DESC.split('\s+-\s*|\s*-\s+') 这似乎不起作用,因为它返回了 [ '
我正在编写一个简单的字符串连接程序。 该程序按照我发布的方式运行。但是,我首先使用以下代码编写它来查找字符串的结尾: while (*s++) ; 但是,这个方法并没有奏效。我传递给它的字符串
这个问题已经有答案了: What does (?和aramchand来自Mohandas Karamchand G 因此,在使用这些匹配来分割字符串后,您最终会得到 {"M", "K", "G"} 注
我正在尝试转换 Map到 List使用 lambda。 本质上,我想将键和值与 '=' 连接起来之间。这看起来微不足道,但我找不到如何去做。 例如 Map map = new HashMap<>();
我正在经历 K & R,并且在递增指针时遇到困难。练习 5.3(第 107 页)要求您使用指针编写一个 strcat 函数。 在伪代码中,该函数执行以下操作: 将 2 个字符串作为输入。 找到字符串
在下面的代码中,pS 和 s.pS 在最后一行是否保证相等?也就是说,在语句S s = S();中,是否可以确定不会构造一个临时的S? #include using namespace std; s
演示示例代码: public void ReverseString(char[] s) { for(int i = 0, j = s.Length-1; i < j; i++, j--){
我一直在寻找类似于 .NET examples 中的示例的 PowerShell 脚本.取一个 New-TimeSpan 并显示为 1 天 2 小时 3 分钟 4 秒。排除其零的地方,在需要的地方添加
def func(s): s = s + " is corrected" return s string_list = ["She", "He"] for s in string_li
我是 python 的新手。当我在互联网上搜索 lambda 时。我在 lambda_functions 中找到了这个声明. processFunc = collapse and (lambda s:
我最近开始学习正则表达式,并试图为上面的问题写一个正则表达式。如果限制只放在一个字母上(例如不超过 2 个“b”),这并不困难。 那么答案就是:a* c*(b|ε)a* c*(b|ε)a* c* 但是
当我运行 npm install 时出现以下错误,但我无法修复它。 我试过:npm install -g windows-build-tools 也没有修复这个错误 ERR! configure
有很多有趣的haskell网上可以找到片段。 This post可以在 this (awesome) Stack Overflow question 下找到. The author写道: discou
我知道以下三行代码旨在将字符串提取到$ value中并将其存储在$ header中。但是我不知道$value =~ s/^\s+//;和$value =~ s/\s+$//;之间有什么区别。 $val
我是一名优秀的程序员,十分优秀!