我正在尝试使上传的 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:“私人”而不是“公共”
添加它的客户端很容易
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?