gpt4 book ai didi

amazon-s3 - 使用 Clojure 的 Amazonica 创建 S3 签名 URL 时如何指定 ACL 策略?

转载 作者:行者123 更新时间:2023-12-01 05:51:39 25 4
gpt4 key购买 nike

我正在尝试使上传的 ACL 为 public-read . Amazonica 的文档非常薄,经过数小时的修修补补,我离弄清楚如何实现这一目标还差得远。简而言之,我不知道如何让它签署标题。

服务器端,我的代码如下所示。

(s3/generate-presigned-url 
creds
{:bucket-name "mybucket"
:method "PUT"
:expires 10000
:key "my-key"
:cache-control "max-age=31557600;"
:request-parameters {:x-amz-acl "public-read"}
})

客户端,我获取创建并执行 XHR PUT 请求的 URL
var xhr = new XMLHttpRequest();
xhr.open("PUT", signedUrl);
xhr.setRequestHeader('Cache-Control', 'max-age=31557600')
xhr.onload = ...
xhr.onerror = ...
xhr.send(file);

这完美地工作,除了它有错误的ACL:“私有(private)”而不是“公共(public)”

添加它的客户端很容易
var xhr = new XMLHttpRequest();
xhr.open("PUT", signedUrl);
xhr.setRequestHeader('Cache-Control', 'max-age=31557600')
xhr.setRequestHeader('x-amz-acl', 'public-read')
xhr.onload = ...
xhr.onerror = ...
xhr.send(file);

但是由于 HeadersNotSigned,请求当然会失败。 .我根本不知道如何在服务器端添加它以便他们得到签名。 SignedHeaders部分从不包含任何附加参数。

我盲目地尝试过各种组合
(s3/generate-presigned-url 
creds
{:headers {:x-amz-acl "public-read"}
:x-amz-acl "public-read"
:metadata {:x-amz-acl "public-read"}
:signed-headers {:x-amz-acl "public-read"}
:amz-acl "public-read"
:x-amz-signed-headers {:x-amz-acl "public-read"}
:X-Amz-SignedHeaders ["x-amz-acl"]
:request-parameters {:x-amz-acl "public-read"}
})

如何将 ACL 策略添加到签名的 url?

最佳答案

我对此没有直接的答案,但有一个解决方法供您考虑:将 s3 存储桶中的所有对象默认为公开读取。

您可以通过将此存储桶策略添加到您的存储桶来执行此操作(当然要替换 bucketnm):

{
"Id": "Policy1397632521960",
"Statement": [
{
"Sid": "Stmt1397633323327",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucketnm/*",
"Principal": {
"AWS": [
"*"
]
}
}
]
}

关于amazon-s3 - 使用 Clojure 的 Amazonica 创建 S3 签名 URL 时如何指定 ACL 策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53403225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com