Где я должен хранить загруженные пользователем файлы и изображения в 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 для обслуживания файлов в рабочей среде может быть лучшим вариантом в зависимости от ваших требований.
прежде всего есть два различных варианта:
- вы можете хранить ваши загрузки локально
- вы можете хранить их на внешних службах, таких как 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"
]
это в основном все. См.полная установка инструкции.
П. С. довольно странно, что официальные документы не охватывайте эту тему, я думаю, ее можно было бы улучшить.