[英]Rails active_storage: Check if an attachment is the same as a given file
鉴于以下情况:
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 编码。
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.