Я перевожу Carrierwave в Active Storage в приложении Rails 5.2.3 с файловой системой S3. Проблема в том, что некоторые из моих файлов довольно большие (видеофайлы), и я не могу просто загрузить их для вычисления контрольных сумм.
Для небольших файлов я, вероятно, мог бы использовать ETag
( извлекается с использованием API ). Тем не менее, это не будет работать для больших файлов. Согласно документации :
Если объект создается операцией Multipart Upload или Part Copy, ETag не является дайджестом MD5, независимо от метода шифрования.
Есть ли какой-нибудь достаточно быстрый способ получить контрольную сумму файла? Или мне нужно обезопасить патч ActiveStorage::Blob
compute_checksum_in_chunks
метод и весь соответствующий код (например, JavaScript lib и т. Д.)?
Я бы хотел избежать перезаписи кода Active Storage, потому что (1) его будет сложно поддерживать в будущем, и (2) S3 по-разному рассчитывает ETag в зависимости от способа загрузки / загрузки файла. Единственное решение, которое может сработать, - это удалить ограничение NOT NULL
из таблицы больших двоичных объектов и перезаписать Active Storage, чтобы не вызывать исключение целостности при отсутствии контрольной суммы. Тем не менее, я не уверен, что это хорошая идея (и ремонтопригодность все еще актуальна в этом случае).