跳至内容 跳至搜索

Active Storage Blob 可分析

方法
A

实例公有方法

analyze()

使用相关的分析器从与该 blob 关联的文件中提取并存储元数据。Active Storage 附带了图像和视频的内置分析器。有关它们提取的特定属性以及它们所需的第三方库的信息,请参见 ActiveStorage::Analyzer::ImageAnalyzerActiveStorage::Analyzer::VideoAnalyzer

为了选择 blob 的分析器,Active Storage 按顺序调用每个已注册分析器的 accept?。它使用第一个 accept? 返回 true 的分析器(当给定 blob 时)。如果没有任何已注册的分析器接受 blob,则不会从中提取元数据。

在 Rails 应用程序中,通过在初始化程序中操作 Rails.application.config.active_storage.analyzers 来添加或删除分析器

# Add a custom analyzer for Microsoft Office documents:
Rails.application.config.active_storage.analyzers.append DOCXAnalyzer

# Remove the built-in video analyzer:
Rails.application.config.active_storage.analyzers.delete ActiveStorage::Analyzer::VideoAnalyzer

在 Rails 应用程序之外,请改操作 ActiveStorage.analyzers

通常您不需要从 Rails 应用程序中调用此方法。新 blob 通过 analyze_later 在第一次附加时自动异步分析。

# File activestorage/app/models/active_storage/blob/analyzable.rb, line 29
def analyze
  update! metadata: metadata.merge(extract_metadata_via_analyzer)
end

analyze_later()

ActiveStorage::AnalyzeJob 入队,该作业调用 analyze,或根据分析器类配置内联调用 analyze

此方法在 blob 第一次附加时自动调用。您可以调用它来再次分析 blob(例如,如果您添加了新的分析器或修改了现有的分析器)。

# File activestorage/app/models/active_storage/blob/analyzable.rb, line 37
def analyze_later
  if analyzer_class.analyze_later?
    ActiveStorage::AnalyzeJob.perform_later(self)
  else
    analyze
  end
end

analyzed?()

如果 blob 已被分析,则返回 true。

# File activestorage/app/models/active_storage/blob/analyzable.rb, line 46
def analyzed?
  analyzed
end