Извлечение размеров изображения в фоновом режиме с помощью Shrine - PullRequest
0 голосов
/ 24 декабря 2018

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

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

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

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

1 Ответ

0 голосов
/ 25 декабря 2018

Способ, которым я получил это, заключается в использовании плагина :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 Group .Престижность Янко за то, что он не только создал удивительное программное обеспечение (серьезно, прочитайте источник), но и за его приверженность поддержке сообщества.

...