首页 > 解决方案 > 将现有文件迁移到 Active Storage 时如何计算校验和

问题描述

我正在将 Carrierwave 迁移到 Rails 5.2.3 应用程序中的 Active Storage,并将 S3 作为文件系统。问题是我的一些文件非常大(视频文件),我不能简单地下载它们来计算校验和。

对于小文件,我可能会使用ETag使用 API 获取)。但是,它不适用于更大的文件。根据文档

如果一个对象是由 Multipart Upload 或 Part Copy 操作创建的,则无论加密方法如何,ETag 都不是 MD5 摘要。

有没有足够快的方法来获取文件的校验和?还是我需要修补ActiveStorage::Blob'scompute_checksum_in_chunks方法和所有相关代码(如 JavaScript lib 等)?

我想避免覆盖 Active Storage 代码,因为(1)将来很难维护,(2)S3 根据文件上传/上传的方式不同地计算 ETag。唯一可行的解​​决方案是NOT NULL从 blobs 表中删除约束并覆盖 Active Storage 以在缺少校验和时不引发完整性异常。但是,我不确定这是否是一个好主意(在这种情况下,可维护性仍然相关)。

标签: ruby-on-railsrubyamazon-s3carrierwaverails-activestorage

解决方案


推荐阅读