Active Storage 预览
可以预览一些非图像 Blob:也就是说,可以将它们显示为图像。可以通过提取视频 Blob 的第一帧来预览视频,可以通过提取 PDF Blob 的第一页来预览 PDF。
预览器从 Blob 中提取预览图像。Active Storage 为视频和 PDF 提供预览器。ActiveStorage::Previewer::VideoPreviewer
用于视频,而 ActiveStorage::Previewer::PopplerPDFPreviewer
和 ActiveStorage::Previewer::MuPDFPreviewer
用于 PDF。通过对 ActiveStorage::Previewer
进行子类化并实现必需的方法来构建自定义预览器。有关预览器要求的更多详细信息,请参阅 ActiveStorage::Previewer
文档。
为了为 Blob 选择预览器,Active Storage 会按顺序对每个已注册的预览器调用 accept?
。它使用在给定 Blob 时 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 不提供这些库。您必须自己安装它们才能使用内置预览器。在安装和使用第三方软件之前,请确保您了解这样做的许可影响。
属性
[R] | Blob | |
[R] | 变体 |
类公共方法
新建(blob, variation_or_variation_key) 链接
实例公共方法
下载(&block) 链接
下载与此预览的变体关联的文件。如果未指定块,则将整个文件读入内存并返回。对于非常大的文件,这将占用大量 RAM。如果指定了块,则下载将以流的形式进行,并分块生成。如果预览尚未处理,则引发ActiveStorage::Preview::UnprocessedError
。
图像() 链接
返回 Blob 附加的预览图像。
键() 链接
返回 Blob 和变体的组合键,用于共同标识特定变体。
已处理() 链接
如果预览尚未处理,则对其进行处理。为方便起见,返回接收的 ActiveStorage::Preview
实例
blob.preview(resize_to_limit: [100, 100]).processed.url
处理预览会根据其 Blob 生成图像,并将预览图像附加到 Blob。由于预览图像与 Blob 一起存储,因此仅生成一次。
源:显示 | 在 GitHub 上
# File activestorage/app/models/active_storage/preview.rb, line 52 def processed process unless processed? variant.processed self end
url(**options) 链接
返回服务上预览变体的 URL。如果预览尚未处理,则引发 ActiveStorage::Preview::UnprocessedError
。
此方法同步处理预览图像的变体,因此请勿在视图中调用它。相反,生成一个稳定的 URL,重定向到此方法返回的 URL。
源:显示 | 在 GitHub 上
# File activestorage/app/models/active_storage/preview.rb, line 68 def url(**options) if processed? variant.url(**options) else raise UnprocessedError end end