module Shrine::Plugins::Signature

  1. lib/shrine/plugins/signature.rb

The signature plugin provides the ability to calculate a hash from file content. This hash can be used as a checksum or just as a unique signature for the uploaded file.

Shrine.plugin :signature

The plugin adds a #calculate_signature instance and class method to the uploader. The method accepts an IO object and a hashing algorithm, and returns the calculated hash.

Shrine.calculate_signature(io, :md5)
#=> "9a0364b9e99bb480dd25e1f0284c8555"

You can then use the add_metadata plugin to add a new metadata field with the calculated hash.

plugin :add_metadata

add_metadata :md5 do |io, context|
  calculate_signature(io, :md5)

This will generate a hash for each uploaded file, but if you want to generate one only for the original file, you can add a conditional:

add_metadata :md5 do |io, context|
  calculate_signature(io, :md5) if context[:action] == :cache

The following hashing algorithms are supported: SHA1, SHA256, SHA384, SHA512, MD5, and CRC32.

You can also choose which format will the calculated hash be encoded in:

Shrine.calculate_signature(io, :sha256, format: :base64)

The supported encoding formats are hex (default), base64, and none.