-1
我试图生成一个预先签名的URL链接以传递给客户端。只要文件不包含空格,我的逻辑就可以很好地工作。但是,如果它出现,我会得到一个“指定的密钥不存在”。错误。生成带空格的文件的预签名S3 URL
要清楚,我正在使用URL本身并解析它。所以,关键是这个样子,当我得到它:
mybucket/my+file+with+spaces.pdf
因此,S3 SDK似乎采取的长处和他们URL编码为%2B所以当链接被点击它不承认路径。如果我重新写回链接把'+'放回去,我得到以下错误:
The request signature we calculated does not match the signature you provided. Check your key and signing method.
S3做了一些古怪的网址编码,可能无法修复,因为它已经有10年的历史了。你在哪里得到那个带有“+”符号的原始网址?我问,因为你的解决方案可能工作但不完整。 –
@ Michael-sqlbot感谢您的评论!我从另一个应用程序获取事件中的url。该应用程序将文档上传到kms加密位置并将事件传递给我。我提取文档链接并生成到期链接。你看到有什么问题吗? – RockyMountainHigh
你应该使用一个库来解码url转义并传递你在那里得到的值。如果文件名实际上包含一个文字'+',另一个应用程序应该向您发送'%2B',如果您将其传递给SDK,它将以'%252B'的形式发送给S3(将'%'转义为' 25'),这也被破坏了,并且接收到的任何其他百分比编码的文字也是如此。对接收到的值使用url解码应该将它们转换回正常状态,以便SDK具有标准化值以便处理。这就是为什么我怀疑你的修复只能修复你迄今为止看到的一个问题。 –