2011-10-26 50 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" 
相关问题