Я пытаюсь сделать загрузку с 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"}
})
На стороне клиента я беру URL, который создает и выполняет запрос PUT XHR
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-адрес?