sme*_*fju 5 ruby ruby-on-rails amazon-s3 carrierwave rails-activestorage
我正在将 Carrierwave 迁移到 Rails 5.2.3 应用程序中的 Active Storage,并使用 S3 作为文件系统。问题是我的一些文件非常大(视频文件),我不能简单地下载它们来计算校验和。
对于小文件,我可能可以使用ETag(使用 API 获取)。但是,它不适用于较大的文件。根据文档:
如果对象是通过分段上传或部分复制操作创建的,则无论采用何种加密方法,ETag 都不是 MD5 摘要。
有没有足够快的方法来获取文件的校验和?或者我是否需要猴子修补 的ActiveStorage::Blob方法compute_checksum_in_chunks和所有相关代码(如 JavaScript lib 等)?
我想避免覆盖 Active Storage 代码,因为 (1) 将来很难维护,(2) S3 根据文件上传的方式以不同的方式计算 ETag。唯一可行的解决方案是NOT NULL从 blob 表中删除约束并覆盖 Active Storage,以便在校验和丢失时不会引发完整性异常。但是,我不确定这是否是一个好主意(并且可维护性在这种情况下仍然相关)。