Spec-Zone.ru › Ruby on Rails 8.1

class ActiveStorage::Preview

Родительский класс:
Object

Предпросмотр Active Storage

Для некоторых блобов, не являющихся изображениями, можно создать предпросмотр, то есть представить их в виде изображений. Для видеоблоба можно создать предпросмотр, извлекая его первый кадр, а для PDF-блоба — извлекая его первую страницу.

Модуль предпросмотра извлекает изображение для предпросмотра из блоба. Active Storage предоставляет модули предпросмотра для видео и PDF. ActiveStorage::Previewer::VideoPreviewer используется для видео, а ActiveStorage::Previewer::PopplerPDFPreviewer и ActiveStorage::Previewer::MuPDFPreviewer — для PDF. Создавайте собственные модули предпросмотра, наследуя ActiveStorage::Previewer и реализуя необходимые методы. Подробнее о требованиях к модулям предпросмотра см. в документации ActiveStorage::Previewer.

Чтобы выбрать модуль предпросмотра для блоба, Active Storage по очереди вызывает accept? для каждого зарегистрированного модуля. Используется первый модуль, для которого accept? возвращает true при передаче блоба. В приложении Rails добавляйте или удаляйте модули предпросмотра, изменяя Rails.application.config.active_storage.previewers в инициализаторе:

Rails.application.config.active_storage.previewers
# => [ ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer ]

# Add a custom previewer for Microsoft Office documents:
Rails.application.config.active_storage.previewers << DOCXPreviewer
# => [ ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer, DOCXPreviewer ]

Вне приложения Rails вместо этого изменяйте ActiveStorage.previewers.

Встроенные модули предпросмотра используют сторонние системные библиотеки. В частности, встроенному модулю предпросмотра видео требуется FFmpeg. Для PDF предусмотрены два модуля предпросмотра: одному требуется Poppler, другому — muPDF (версии 1.8 или новее). Чтобы создавать предпросмотры PDF, установите Poppler или muPDF.

Эти библиотеки не входят в состав Rails. Чтобы использовать встроенные модули предпросмотра, необходимо установить их самостоятельно. Прежде чем устанавливать и использовать стороннее программное обеспечение, убедитесь, что понимаете связанные с этим лицензионные последствия.

Атрибуты

blob [R]
variation [R]

Публичные методы класса

new (blob, variation_or_variation_key) Показать исходный код
# File activestorage/app/models/active_storage/preview.rb, line 42
def initialize(blob, variation_or_variation_key)
  @blob, @variation = blob, ActiveStorage::Variation.wrap(variation_or_variation_key)
end

Публичные методы экземпляра

download (&block) Показать исходный код
# File activestorage/app/models/active_storage/preview.rb, line 90
def download(&block)
  if processed?
    presentation.download(&block)
  else
    raise UnprocessedError
  end
end

Загружает файл, связанный с вариантом этого предпросмотра. Если блок не передан, весь файл считывается в память и возвращается. Для очень больших файлов это потребует много оперативной памяти. Если блок передан, файл загружается потоково и передаётся ему фрагментами. Вызывает исключение ActiveStorage::Preview::UnprocessedError, если предпросмотр ещё не обработан.

image () Показать исходный код
# File activestorage/app/models/active_storage/preview.rb, line 59
def image
  blob.preview_image
end

Возвращает прикреплённое к блобу изображение для предпросмотра.

key () Показать исходный код
# File activestorage/app/models/active_storage/preview.rb, line 77
def key
  if processed?
    presentation.key
  else
    raise UnprocessedError
  end
end

Возвращает составной ключ блоба и вариации, который вместе идентифицирует конкретный вариант.

processed () Показать исходный код
# File activestorage/app/models/active_storage/preview.rb, line 52
def processed
  process unless processed?
  variant.processed if variant?
  self
end

Обрабатывает предпросмотр, если он ещё не был обработан. Для удобства возвращает принимающий экземпляр ActiveStorage::Preview:

blob.preview(resize_to_limit: [100, 100]).processed.url

При обработке предпросмотра из его блоба создаётся изображение, которое прикрепляется к блобу. Поскольку изображение для предпросмотра хранится вместе с блобом, оно создаётся только один раз.

url (**options) Показать исходный код
# File activestorage/app/models/active_storage/preview.rb, line 68
def url(**options)
  if processed?
    presentation.url(**options)
  else
    raise UnprocessedError
  end
end

Возвращает URL варианта предпросмотра на службе хранения. Вызывает исключение ActiveStorage::Preview::UnprocessedError, если предпросмотр ещё не обработан.

Этот метод синхронно обрабатывает вариант изображения для предпросмотра, поэтому не вызывайте его в представлениях. Вместо этого создайте постоянный URL, перенаправляющий на URL, возвращаемый этим методом.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API