Waffles — библиотека загрузки файлов с открытым исходным кодом для Elixir
Waffle — это удобная библиотека, разработанная одним из наших инженеров Evrone. Незаменимый инструмент для разработчиков, которые работают с проектами на Elixir, которые обрабатывает загрузку файлов от пользователей. Наш open-source поддерживает простую интеграцию с распространенными сервисами хранения.
Вы работаете над Elixir-проектами, которые должны обрабатывать загрузку файлов от пользователей?
Waffle — это удобная библиотека, разработанная одним из наших инженеров — Борисом Кузнецовым — которая обрабатывает загрузку файлов для вас, обеспечивая при этом простую интеграцию с такими сервисами хранения, как Amazon S3, Google Cloud Storage, Azure, RackSpace Cloud, а также с инструментами для работы с изображениями, например, ImageMagick, так что загружаемые файлы могут быть оптимизированы на лету!
Waffle вырос из форка уже неподдерживаемой библиотеки, в которую мы добавили полную документацию, исправили нерешённые проблемы, смёрджили открытые запросы, добавили интеграции с другими частями экосистемы Elixir (в частности, с Phoenix и Ecto). Мы также поработали над новыми функциями, такими как валидация файлов на основе содержимого, а не типа, предоставляемого браузером.
Это релиз Waffle — v1.0.0. Если вы ранее использовали Arc, то переход к Waffle будет очень прост, но нужно обратить внимание, что зависимости были обновлены, и Poison был заменен на Jason.
Начало работы с Waffle
Чтобы начать, добавьте последнюю стабильную версию Waffle в файл mix.exs. Также добавьте необходимые зависимости для ExAws, если вы хотите хранить файлы в бакете S3:
defp deps do
[
{:waffle, "~> 1.0.0"},
# If using S3:
{:ex_aws, "~> 2.1"},
{:ex_aws_s3, "~> 2.0"},
{:hackney, "~> 1.9"},
{:sweet_xml, "~> 0.6"}
]
end
Затем вы можете запустить mix deps.get в своей оболочке, чтобы скачать зависимости. Это всё, что вам нужно, чтобы запустить Waffle!
Давайте также рассмотрим конфигурацию и посмотрим, на что способен Waffle. Он требует конфигурирования определённых свойств на уровне приложения:
# Configuration for Waffle itself:
config :waffle,
storage: Waffle.Storage.S3, # or Waffle.Storage.Local
bucket: {:system, "AWS_S3_BUCKET"}, # if using S3
asset_host: "http://static.example.com" # or {:system, "ASSET_HOST"}
# If you're using S3, configure ExAws too:
config :ex_aws,
json_codec: Jason
Для Waffle необходим модуль определений, который содержит релевантную конфигурацию для хранения и загрузки/извлечения ваших файлов. Этот модуль определений содержит релевантные функции для определения вариантов преобразований загруженного файла, директории хранилища, имени файлов, плейсхолдеров по умолчанию и обеспечения конфиденциальности или общедоступности ваших файлов.
Давайте сгенерируем разрешение вложения для загрузчика аватара:
mix waffle.g avatar_uploader
Это создаст скелет структуры вашего загрузчика в:
web/uploaders/avatar_uploader.ex
Просмотрите этот файл, чтобы увидеть доступные параметры конфигурации. Ознакомьтесь с полным примером в документации по Waffle, чтобы узнать, на что он способен!
Провайдеры хранилищ
Waffle по умолчанию поставляется с интеграциями для записи загрузок в путь к файловой системе (Waffle.Storage.Local) и в Amazon S3 (Waffle.Storage.S3), но есть дополнительные провайдеры хранилищ, поддерживаемые сообществом, которые вы можете легко добавить в свой проект: Google Cloud Storage, Rackspace, Manta, OVH и Microsoft Azure Storage.
Waffle + Ecto
Waffle поставляется с сопутствующим пакетом для использования с Ecto, инструментарием Elixir для взаимодействия с хранилищами данных, обеспечивающим интеграцию наборов изменений и версионные URL-адреса для очистки кэша. Вы можете включить это, добавив waffle_ecto зависимость в ваш файл mix.exs
Погрузитесь в документы
Мы собрали всеобъемлющее руководство по Waffle со статьями, примерами кода и гайдлайнами, чтобы помочь вам как можно быстрее приступить к работе.
Waffle в действии
Мы активно используем Waffle в нескольких проектах, один из них — веб-приложение, которое помогает изучать английскую лексику и практиковать произношение. Мы очень гордимся тем, насколько далеко зашла эта идея, и мы продолжаем усердно работать, чтобы сделать Waffle лучшим решением для загрузки файлов для Elixir — и ваших проектов!