Meh*_*ran 1 amazon-s3 amazon-web-services pre-signed-url
我正在尝试为 AWS 上的 S3 存储桶生成一个预先签名的 URL 以上传文件,如下所示:
$ aws s3 presign s3://mybucket/somefolder/
Run Code Online (Sandbox Code Playgroud)
然后我使用该 URL 上传文件:
$ curl "https://mybucket.s3.amazonaws.com/somefolder/?AWSAccessKeyId=***&Signature=***&Expires=***" --upload-file "./file"
Run Code Online (Sandbox Code Playgroud)
但随后它会打印出一个 XML 错误:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<AWSAccessKeyId>***********</AWSAccessKeyId>
<StringToSign>PUT
************
/mybucket/somefolder/</StringToSign>
<SignatureProvided>**************</SignatureProvided>
<StringToSignBytes>**************</StringToSignBytes>
<RequestId>************</RequestId>
<HostId>************</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
[更新]
好的,所以我必须在预签名 URL 中指定对象名称。所以我做了,但我仍然面临同样的错误信息:
$ aws s3 presign s3://mybucket/someobject
Run Code Online (Sandbox Code Playgroud)
进而:
$ curl "https://mybucket.s3.amazonaws.com/someobject?AWSAccessKeyId=***&Signature=***&Expires=***" --upload-file "./file"
Run Code Online (Sandbox Code Playgroud)
我会得到与以前完全相同的错误。为了确保这不是权限问题,我像这样测试了它:
$ aws s3 cp ./file s://mybucket/
Run Code Online (Sandbox Code Playgroud)
并且文件被复制了!有什么建议?
[更新]
我什至使用存储桶中实际存在的对象进行了测试,并成功下载了它。但我仍然无法写入对象,只能读取。
| 归档时间: |
|
| 查看次数: |
2400 次 |
| 最近记录: |