2011-10-26 48 views
52

我使用回形針來管理用戶上傳的圖像,該圖像完全在HTTPS下提供。爲了避免IE7/IE8上的愚蠢的安全警告,我還需要通過SSL提供這些圖片。我通常使用類似下面的渲染我的圖片:是否可以配置回形針製作HTTPS網址?

<%= image_tag @product.image.url(:large) %> 

其中

class Product < ActiveRecord::Base 

    has_attached_file :image, 
        :styles => { 
         :large => {:geometry => "616x450#"} 
        }, 
        :storage => :s3, 
        :s3_credentials => {:access_key_id => "xxx", :secret_access_key => "xxx"}, 
        :path => ":attachment/:id/:style/:basename.:extension", 
        :bucket => CONFIG['s3_media_bucket'], 
        :default_url => "/assets/image_missing.png" 

和產生的圖像URL是一樣的東西:

http://s3.amazonaws.com/media.example.com/images/6/large/image123.JPG 

有一個神奇的回形針選項來改變這:

https://s3.amazonaws.com/media.example.com/images/6/large/image123.JPG 

回答

93

你只需要添加:

:s3_protocol => :https 

這是覆蓋in the documentation

有幾個S3特定選項has_attached_file:
...

  • s3_protocol:用於生成您的S3資產的URL協議。可以是'http'或'https'。如果您的:s3_permissions是:public_read(默認值),則默認爲'http';如果您的:s3_permissions是其他任何內容,則默認爲'https'。
+2

@JoshPinter如果我通過回形針已經加載圖像,並希望將HTTPS添加到URL,如何會告訴回形針嗎?有沒有一個選項,我不必再次上傳我的所有圖像。 – Moosa

+1

@Moosa如果你只是改變協議來使用'https',你不應該重新上傳它們。它應該只是工作。試試看,讓我知道。 –

+1

@JoshPinter我試過了,但它不起作用 - has_attached代碼只在上傳時才被調用嗎?如果是這樣,它在現有圖像上如何工作?但是,即使是新的上傳也不會指向https。在S3上,圖片網址顯示爲https,但我的網站顯示爲http。不知道爲什麼。 www.outfitadditions.com。 – Moosa

22

要更新您的代碼只是說,添加:s3_protocol如下:

class Product < ActiveRecord::Base 
has_attached_file :image, 
       :styles => { 
        :large => {:geometry => "616x450#"} 
       }, 
       :storage => :s3, 
       :s3_credentials => {:access_key_id => "xxx", :secret_access_key => "xxx"}, 
       :s3_protocol => :https, 
       :path => ":attachment/:id/:style/:basename.:extension", 
       :bucket => CONFIG['s3_media_bucket'], 
       :default_url => "/assets/image_missing.png" 
相關問題