Где я должен хранить загруженные пользователем файлы и изображения в Phoenix/Elixir?

пользователи моего приложения должны иметь возможность загружать файлы, такие как изображения. Где, в какой папке сохранить эти файлы? Я не знаком с развертыванием приложений Elixir/Phoenix, но я не хочу включать эти файлы в выходные, упакованные файлы, которые генерируются при развертывании моего приложения. Другими словами, Я не хочу каким-то образом статически вставлять загруженные изображения и файлы в мое приложение. Так где мне их хранить?

2 ответов


добавить в app / lib / app / endpoint.ex

plug Plug.Static,
  at: "files/", from: "/var/www/app/files/", gzip: false

и хранить загруженные файлы в /var/www/app/files/

файлы будут обслуживаться по адресу http://localhost:PORT/files/

вы можете узнать больше на https://hexdocs.pm/plug/Plug.Static.html

кроме того, использование чего-то вроде nginx для обслуживания файлов в рабочей среде может быть лучшим вариантом в зависимости от ваших требований.


прежде всего есть два различных варианта:

  1. вы можете хранить ваши загрузки локально
  2. вы можете хранить их на внешних службах, таких как Amazon S3

выбор правильного варианта сильно зависит от вашей бизнес-логики, количества пользователей и запросов и вашей стратегии развертывания (например, Heroku не позволяет хранить загруженные файлы на своих dynos).

локально

Итак, способ хранения файлов локально описано в в этой статье. Короткий ответ:

# lib/my_app/endpoint.ex

plug Plug.Static,
  at: "/uploads", from: Path.expand("./uploads"), gzip: false 

Амазонка

при работе с Amazon S3 вы все равно будете использовать arc и базовая настройка останется такой же, как в статье выше, но все немного отличается и требует перенастроить ваше приложение на немного:

добавить {:ex_aws, "~> 0.4"}, в депс. И добавьте в config:

config :arc,
  bucket: "your-bucket",
  virtual_host: true

config :ex_aws,
  access_key_id: System.get_env("AWS_ACCESS_KEY_ID"),
  secret_access_key: System.get_env("AWS_SECRET_ACCESS_KEY"),
  s3: [
    scheme: "https://",
    host: "your-region.amazonaws.com",
    region: "your-region"
  ]

это в основном все. См.полная установка инструкции.

П. С. довольно странно, что официальные документы не охватывайте эту тему, я думаю, ее можно было бы улучшить.