Извлечение размеров изображения в фоновом режиме с помощью Shrine

Я установил прямые загрузки на S3 с помощью Shrine. Это прекрасно работает. Среди прочего, у меня включены следующие плагины:

Shrine.plugin :backgrounding
Shrine.plugin :store_dimensions 
Shrine.plugin :restore_cached_data

Поправьте меня, если я ошибаюсь, но извлечение размеров изображения происходит синхронно. Если я позволю пользователю загружать изображения через Uppy, а затем сохраню их все, это займет много времени.

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

1 ответ

Решение

Я получил это на работу, используя :refresh_metadata плагин, вместо :restore_cached_data который я использовал изначально. Спасибо Янко за то, что он указал мне правильное направление.

Чтение исходного кода дало некоторые полезные идеи. :store_dimensions Плагин сам по себе не извлекает измерения - он добавляет ширину и высоту к хешу метаданных, поэтому, когда базовый класс Shrine запрашивает метаданные, они также извлекаются.

Используя :restore_cached_dataэто делалось на каждом задании. :restore_cached_data использования :refresh_metadata внутренне, поэтому мы можем использовать это знание, чтобы вызывать его только тогда, когда файл продвигается в хранилище.

я имею :backgrounding а также :store_dimensions установить в инициализаторе, чтобы финальный загрузчик можно было упростить до этого:

class ImageUploader < Shrine
  plugin :refresh_metadata
  plugin :processing

  process(:store) do |io, context|
    io.refresh_metadata!(context)
    io
  end
end

Таким образом, сохранение данных, которые мы получаем из Uppy, происходит очень быстро, и мы позволяем фоновому заданию извлекать измерения при продвижении файла в хранилище, чтобы их можно было использовать позже.

Наконец, если у вас есть вопросы, касающиеся Shrine, я настоятельно рекомендую его специальную группу Google. Престижность Янко не только за создание удивительного программного обеспечения (серьезно, прочитайте источник), но и за его приверженность поддержке сообщества.

Другие вопросы по тегам