Пользователи моего приложения должны иметь возможность загружать такие файлы, как изображения. Где, в какой папке следует сохранять эти файлы? Я не знаком с развертыванием приложений Elixir/Phoenix, но я не хочу включать эти файлы в выходные, упакованные файлы (файлы), которые генерируются при развертывании моего приложения. Другими словами, я не хочу каким-то образом статически вставлять загруженные изображения и файлы в свое приложение. Итак, где я должен хранить их?
Где я должен хранить загруженные пользователем файлы и изображения в Phoenix/Elixir?
Ответ 1
Добавьте это в приложение /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 для обслуживания файлов в рабочей среде может быть лучшим вариантом в зависимости от ваших требований.
Ответ 2
Прежде всего, есть два разных варианта:
- Вы можете сохранять свои загрузки локально.
- Вы можете хранить их на внешних сервисах, таких как Amazon S3
Выбор правильной опции зависит от вашей бизнес-логики, количества пользователей и запросов и стратегии развертывания (например, Heroku не позволяет хранить загруженные файлы на своих динамиках).
Локально
Итак, способ хранения файлов локально описан в в этой статье. Короткий ответ:
# lib/my_app/endpoint.ex
plug Plug.Static,
at: "/uploads", from: Path.expand("./uploads"), gzip: false
Амазонка
При работе с Amazon S3 вы все равно будете использовать arc
, а базовая настройка останется такой же, как в приведенной выше статье, но все просто немного отличается и требует немного изменить конфигурацию приложения:
Добавьте {:ex_aws, "~> 0.4"},
в отпечатки.
И добавьте в конфигурацию:
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"
]
Это в основном это. См. полные инструкции по установке.
P.S. Весьма странно, что официальные документы не охватывают эту тему, я думаю, это можно было бы улучшить.