Paperclip是否可以配置为生成S3的HTTPS网址?

59

我正在使用Paperclip来管理用户上传的图片,这些图片在完全通过HTTPS服务的网站上。为了避免IE7/IE8上的愚蠢安全警告,我需要同时通过SSL来提供这些图片。我通常使用以下方式渲染我的图像:

<%= 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
2个回答

103
你只需要添加以下内容:
:s3_protocol => :https

这在文档中有详细说明。

对于has_attached_file,有一些S3特定的选项:
...

  • s3_protocol: 用于生成指向您的S3资产的URL的协议。可以是“http”或“https”。当您的:s3_permissions为:public_read(默认值)时,默认为“http”,并且当您的:s3_permissions为其他值时,默认为“https”。

2
@JoshPinter 如果我已经通过Paperclip加载了图像,并且想要将https添加到URL中,我该如何告诉Paperclip呢?是否有选项可以让我不必重新上传所有的图像。 - Moosa
1
@Moosa 如果你只是更改协议以使用 https,那么你不必重新上传它们。它应该可以正常工作。试一下并让我知道。 - Joshua Pinter
4
@Moosa,你会在文档中看到,当:s3_permissions:public_read时,默认设置为“http”。请问你的:s3_permissions是什么? - Joshua Pinter
2
@Moosa 啊!太好了,很高兴你找到了它。 - Joshua Pinter
1
文档似乎在这些年里有所改变:"s3_protocol:用于生成到您的S3资产的URL的协议。可以是“http”,“https”或空字符串以生成协议相对URL。默认为空字符串。" - mwfearnley
显示剩余5条评论

26

要更新您的代码,只需像下面这样添加: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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接