Безплатен кредит

По време на четенето на това предполагам, че имате настройка на акаунт в DigitalOcean. Ако не, преминете към digitalocean, за да се регистрирате и да получите $10 безплатен кредит.

Околен свят

Разбъркайте го

Нека създадем нов микс проект! Всичко, през което минаваме, може да се използва по същия начин в приложение „феникс“.

mix new digital_ocean_spaces

Зависимости

За тази статия ще използваме библиотека с еликсири, наречена Arc, за да обработваме качвания на обекти. Нека добавим нашите зависимости към файла mix.exsи инсталираме.

arc: "~> 0.8.0",
ex_aws: "~> 1.1",
hackney: "~> 1.6",
poison: "~> 3.1",
sweet_xml: "~> 0.6"

mix deps.get

Не е нужно да навлизаме твърде далеч в тях за целите на тази разходка. Накратко, :arcобработва качвания на файлове, :ex_aws се занимава с различни AWS услуги, :hackney е Erlang http библиотека за правене на заявки , :poison ще работи с JSON, а :sweet_xml, както може би се досещате, работи с XML.

Поколение

Сега можем да генерираме нашия модел на Arc, като използваме предоставената задача за смесване. Arc предполага, че използваме структурата на папките преди phoenix 1.3, така че когато изпълним задачата за смесване, Arc ще създаде нова уеб папка с новия модул вътре в нея.

mix arc.g my_module

  • За phoenix ‹ 1.3не трябва да се налага да местите нищо.
  • За phoenix ›=1.3 можете да преместите това където пожелаете в lib/my_app/илиlib/my_app_web/и да изтриете web/ папка
  • За приложения, създадени чрез mix new, можем да преместим новия модул в директорията libи да изтрием папката web/.

Нашият модул, генериран от Arc, трябва да изглежда така:

Конфигурирайте го

Последната ни стъпка преди да създадем пространство digitalocean е да конфигурираме нашето приложение за :ex_aws и :arc. Отворете файла config.exs(ако използвате phoenix изберете подходящата среда config.exs) и добавете следното:

config :arc,
  storage: Arc.Storage.S3,
  bucket: System.get_env("AWS_S3_BUCKET")
config :ex_aws, :s3,
  %{
    access_key_id: System.get_env("AWS_ACCESS_KEY_ID"),
    secret_access_key: System.get_env("AWS_SECRET_ACCESS_KEY"),
    scheme: "https://",
    host: %{"nyc3" => System.get_env("AWS_HOST")},
    region: "nyc3"
  }

Може би вече сте забелязали, че S3 и AWS са включени в нашия проект… но Крис, ти ни каза, че ще качваме в Digital Ocean Spaces! За наше щастие първият параграф на тази документация гласи:

„API е съвместим с AWS S3 API на Amazon, което ви позволява да взаимодействате с услугата, докато използвате инструментите, които вече познавате.“

  • AWS_S3_BUCKET — Името на кофата, което създаваме
  • AWS_ACCESS_KEY_ID — Предоставено от digitalocean (ще стигнем до него.)
  • AWS_SECRET_ACCESS_KEY — Тайната, която създаваме/предоставяме за подписване
  • AWS_HOST — Името на хоста, създадено, когато създаваме нашето пространство

Дай ми малко пространство

Сега ще създадем нашето пространство. Влезте в своя акаунт в digitalocean и след това навигирайте в браузъра си до https://cloud.digitalocean.com/spaces/new

Изберете име за вашето пространство, изберете частно и изберете опцията за ценообразуване безплатно или опитайте безплатно, след което създайте новото си пространство. Трябва да видите нещо подобно на:

Сега имаме нужда от нашия AWS_ACCESS_KEY_ID. Навигирайте в браузъра си до https://cloud.digitalocean.com/settings/api/tokens и отново трябва да видите нещо подобно на:

Копирайте AWS_ACESS_KEY_ID от колонатаКлюч (пропусната) за doUser и нека продължим!

Пиене на еликсира

Сега ще качим логото на Elm във вашето новосъздадено пространство!

Отворете модула, генериран от Arc, който създадохме по-рано, моят е my_module.ex и нека добавим следното в горната част на файла:

@acl :read_public

Това променя разрешенията на качените файлове да бъдат четени публично, което ни позволява да извлечем обект. За повече контрол вижте access_control_permissions

Да започнем нашия проект. Копирайте следното и го поставете във вашата обвивка. Всичко между ** трябва да бъде попълнено от вас. ИМЕТО НА ВАШЕТО ПРОСТРАНСТВОтрябва НЕ да включва http:// или https://

AWS_ACCESS_KEY_ID=*YOUR KEY* \
AWS_SECRET_ACCESS_KEY=super_secret \
AWS_S3_BUCKET=my_test_bucket \
AWS_HOST=*YOUR SPACE NAME*.nyc3.digitaloceanspaces.com \
iex -S mix

Накрая нека качи обекта!

iex(1)> elm_logo = "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Elm_logo.svg/2000px-Elm_logo.svg.png"
iex(2)> DigitalOceanSpaces.MyModule.store(elm_logo)

Това е! Вече трябва да можете да видите файла във вашата кофа.

Бонус

Извлечете вашия съхранен обект с помощта на ExAws

iex(1)> bucket = "my_test_bucket"
iex(2)> object_path = "uploads/2000px-Elm_logo.svg.png"
iex(3)> ExAws.S3.get_object(bucket, object_path) \
iex(4)> |> ExAws.request