2017-02-16 5 views
0

Библиотека Elixir ExAws Модуль S3 имеет метод put_object, который позволяет выполнять загрузку файла.ExAws S3 - Получить URL-адрес загруженного файла

%{path: filepath, filename: filename} = %Plug.Upload{...} 
{:ok, contents} = File.read(filepath) 
time = DateTime.utc_now() |> DateTime.to_unix 
path = "#{Mix.env}/#{time}/#{filename}" 

@bucket |> ExAws.S3.put_object(path, contents) |> ExAws.request 
=> {:ok, %{body: "", headers: [{"x-amz-id-2", "someid="}, {"x-amz-request-id", "someid"}, {"Date", "Thu, 16 Feb 2017 19:43:01 GMT"}, {"ETag", "\"sometag\""}, {"Content-Length", "0"}, {"Server", "AmazonS3"}], status_code: 200}} 

Однако мне не удалось выяснить URL-адрес моего загруженного файла. Используя эту библиотеку, как я могу получить URL моего загруженного файла?

+1

Я уверен, что 'ex_aws' не предоставляет эту опцию. Я использовал его с комбинацией с 'arc', и arc в основном генерирует URL-адреса самостоятельно, но иногда они недействительны. Лучшее решение - проверить вручную, какие URL-адреса ваших файлов и на основе этого создадут вашу собственную функцию 'get_url'. Я оказался очень задуман дугой, и я всерьез задумываюсь о создании собственной библиотеки загрузки/скачивания S3. – PatNowak

ответ

0

В общем, файл в S3 соответствует схеме:

s3://<bucket-name>/<file-key> 

где файл-ключ может включать в себя каталоги и тому подобное. Это когда вы используете протокол S3 для инструмента, такого как AWS cli.

Однако для доступа типа HTTP, шаблон

https://s3.amazonaws.com/<bucket-name>/<file-key> 

Но только если вы включили статический хостинг в ведре и разрешен доступ к файлу-ключу к кому должны получить его. Это не значение по умолчанию. Вам нужно либо вручную установить ведро, либо файл, который будет доступен для чтения через HTTPS через консоль или через набор инструментов. Похоже, что это может быть связано с некоторой комбинацией put_bucket_website, put_bucket_acl и/или put_object_acl.

Смежные вопросы