ruby-on-rails ActiveStorage:如何验证文件的内容?

nszi6y05  于 2023-06-25  发布在  Ruby
关注(0)|答案(1)|浏览(175)

我想在自定义验证中读取要上传的文件的内容。这可能吗?
到目前为止,我已经看到可以对文件的元数据(扩展名,大小...)执行一些验证,但不能对它的内容执行。我也看到过this question,它有点类似,尽管我不想修改文件。我只想在自定义验证中读取它。

cyvaqqii

cyvaqqii1#

看起来你可以访问正在上传的文件,并在验证中简单地读取它。
例如

class User < ApplicationRecord
  has_one_attached :resume
  
  validate :resume_contents

  private 
    def resume_contents
      return unless record.send(attribute).attached? && !record.attachment_changes['resume'].blank?
      file = record.attachment_changes['resume'].attachable
      if file.is_a?(ActionDispatch::Http::UploadedFile) && file.read =~ /bad content/i
        errors.add(:resume, :invalid, message: 'cannot contain bad content')
      end
    end
end

更深入的实现可以参考active_storage_validations gem:

  • 文件访问
  • 文件阅读

相关问题