..

Paperclip S3 expiring_url with styles and SSL

A current requirement is that assets uploaded to Amazon S3 must be accessed via SSL and use an expiring URL. Using an expiring url with Paperclip is extremely easy.

my_model.image.expiring_url(5)

The problem is expiring_url doesn’t let you choose a style and doesn’t use https, which breaks our SSL site. To add the behaviour was an easy “hack”. I added the file /config/initializers/paperclip.rb with the following code:

module Paperclip
  module Storage
    module S3
     def expiring_url(style = default_style, time = 3600)
        AWS::S3::S3Object.url_for(path(style), 
                                  bucket_name, 
                                  :expires_in => time, 
                                  :use_ssl => true)
     end
    end
  end
end

Now calling my expiring image URL with a style and over https is just:

my_model.image.expiring_url(:original, 5)