Как рассчитать контрольные суммы при переносе существующих файлов в Active Storage - PullRequest
3 голосов
/ 04 июля 2019

Я перевожу 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, чтобы не вызывать исключение целостности при отсутствии контрольной суммы. Тем не менее, я не уверен, что это хорошая идея (и ремонтопригодность все еще актуальна в этом случае).

...