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

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

鉴于以下情况:

我想检查 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

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