Работа с файлами с помощью библиотеки Waffle для Elixir

Waffles — библиотека загрузки файлов с открытым исходным кодом для Elixir

Вы работаете над 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 — и ваших проектов!

Создать библиотеку загрузки файлов простой, лаконичной и легкой в использовании — это настоящий вызов. Мы очень надеемся, что Waffle станет вашим лучшим другом для управления и загрузки файлов!
Борис Кузнецов
Ведущий разработчик, Evrone
Связаться с нами
Нужна команда?
Давайте обсудим ваш проект
Прикрепить файл
Максимальный размер файла: 8 МБ.
Допустимые типы файлов: jpg jpeg png txt rtf pdf doc docx ppt pptx.