Я пытаюсь использовать метод ExAws.S3.presign_url/5
в пакете ex_aws_s3
.
Короче говоря - независимо от того, какой URL-адрес я использую или варианты ... Я просто не могу получить это функция для игры в мяч даже с почтальоном, не говоря уже о попытке отправить данные из браузера как объект формы.
(ответ, заголовки и URL1)
(ответ, заголовки и url2)
моя функция:
def presign_post_url(bucket_name, file_name, file_type_extension) do config = %
config = { region: "eu-west-1" }
ex_s3_client = ExAws.Config.new(:s3, config)
query_params = [
{ "Content-Type", "image/jpg"},
{'key', "profile-pictures/" <> file_name}
# { "content-length-range", "10\,10000000" }#max 10MB
]
presign_options = [virtual_host: false, query_params: query_params]
ExAws.S3.presigned_url(ex_s3_client, :post, "profile-pictures", file_name, presign_options)
end
, которая возвращает что-то вроде:
https://bucket-name.s3.amazonaws.com/profile-pictures/67641eaf-4e3e-4792-98da-8df533605cd2.jpg?Content-Type=image%2Fjpg&key=profile-pictures%2F67641eaf-4e3e-4792-98da-8df533605cd2.jpg&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAXHBL256UAYWNNMAO%2F20200404%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Date=20200404T034332Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=1fcb3ebd678ea2f26cee5709004914cb3c7bc057c7ba164cdba160eec999cbb1
Ошибка, которую я получаю - неважно, как я создаю URL с помощью bucket_name / путь к папке / difts3-url-структура, я всегда получаю:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>MethodNotAllowed</Code>
<Message>The specified method is not allowed against this resource.</Message>
<Method>POST</Method>
<ResourceType>OBJECT</ResourceType>
<RequestId>D0BA0AC513BE36D6</RequestId>
<HostId>NyzdUPLDzHnbkHzWxxcLjdGXOXkpmGOUU1KFIAPJ+vpIPEq0WWyZEerGq1xySG26qzPfKUg7l/o=</HostId>
</Error>
Cors на ведро:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Я в тупике.
Также - это работает с PUT .. просто не POST. Я прочитал кое-что о том, что пост действительно перенаправлен на пут, но вам нужно иметь правильный URL.
2 вида URL на s3
https:/bucket_name.s3.amazonaws.coms/folder_where_file_is/file_nmae.jpg
и затем вы передаете регион в config.
или
https://s3-eu-west-1.amazonaws.com/bucket_name/folder_where_file_is/file_nmae.jpg
Я показал это на скриншотах - все еще не работает.