Для некоторых типов объектов S3, как описано ниже, Etag является контрольной суммой MD5 файла.
"Объекты, созданные с помощью объекта PUT, объекта POST или операции копирования или через Консоль управления AWS и зашифрованные с помощью SSE-S3 или открытого текста, имеют ETag, которые представляют собой дайджест MD5 своихданные объекта. Объекты, созданные с помощью объекта PUT, объекта POST или операции копирования или через Консоль управления AWS и зашифрованные с помощью SSE-C или SSE-KMS, имеют теги ETag, которые не являются дайджестом MD5 своих данных объекта.объект создается с помощью операции Multipart Upload или Part Copy, ETag не является дайджестом MD5, независимо от метода шифрования "
ref: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonResponseHeaders.html
Есливаш вариант использования соответствует приведенному выше, вы сможете использовать его вместо загрузки и переваривания всего файла.
Мой код для этого выглядит так:
key = "#{id}/#{filename}"
resp = @s3client.head_object({bucket: @bucket, key: key})
checksum_base64 = [[resp.etag].pack("H*")].pack("m0")
Для повышения производительности выможно использовать API client#list_objects
для получения ObjectSummary
записей оптом для всего вашего сегмента или подмножества и использовать их для поиска Etag / контрольной суммы.
Я не полностью протестировал этот eс ActiveSupport. (Как правило, это не очень хорошая замена для Paperclip прямо сейчас. В частности, отсутствие поддержки нескольких ведер для нас в данный момент немного ограничивает показ) .