Richard Hart

Head of Something @ Somewhere
Kent, UK

My Music
My Photos

LinkedIn
Mastodon

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)