繁体   English   中英

Rails active_storage:检查附件是否与给定文件相同

[英]Rails active_storage: Check if an attachment is the same as a given file

鉴于以下情况:

  • 通过文件传输新收到的 PDF 类型的文档source
  • 使用active_storage和版本化保存为附件 blob 的文档target

我想检查任何现有版本的target是否二进制等于source 如果没有active_storage ,我会对进入数据库的任何 blob 进行 SHA256 总和。 为了进行比较,我会将source的新 SHA256 总和与为任何版本的target存储的每个校验和进行比较。

然而, active_storage附件和 blob 的方法.checksum似乎既不是 MD5 也不是 SHA265 和。 例如,对于某些文件,我得到Cr4IxYNF7v7cJao1EiiBEw==

一个解决方案是使用Digest::SHA256.hexdigest(Person.find(46).photo.download)之类的东西,但是性能会很糟糕。

如何有效地搜索我的active_storage “数据库”?

根据 ActiveStorage 来源,校验和实际上是 MD5。 但它已经被 base64 编码。

来源: https://github.com/rails/rails/blob/8da6ba9cae21beae1ee3c379db7b7113d2731c9b/activestorage/app/models/active_storage/blob.rb#L313

def compute_checksum_in_chunks(io)
  Digest::MD5.new.tap do |checksum|
    while chunk = io.read(5.megabytes)
      checksum << chunk
    end

    io.rewind
  end.base64digest
end

所以希望您应该能够仅对 base64 编码您自己的 MD5 哈希值,以便在数据库中进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM