2011-10-26 26 views
52

Tôi đang sử dụng Paperclip để quản lý hình ảnh do người dùng tải lên trên trang web được phân phối hoàn toàn dưới HTTPS. Để tránh các cảnh báo bảo mật ngớ ngẩn trên IE7/IE8, tôi cũng cần phải phân phát những hình ảnh này qua SSL. Tôi thường làm cho hình ảnh của tôi sử dụng một cái gì đó như sau:Có thể định cấu hình Kẹp giấy để tạo url HTTPS không?

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

nơi

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" 

và URL hình ảnh sản xuất là một cái gì đó như:

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

Có một lựa chọn Kẹp giấy phép thuật để thay đổi này:

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

Trả lời

93

Bạn chỉ cần thêm:

:s3_protocol => :https 

Điều này được bao gồm in the documentation.

Có một vài tùy chọn S3 cụ thể cho has_attached_file:
...

  • s3_protocol: Các giao thức cho các URL được tạo ra với tài sản S3 của bạn. Có thể là ‘http’ hoặc ‘https’. Mặc định là ‘http’ khi: s3_permissions của bạn là: public_read (mặc định) và ‘https’ khi: s3_permissions của bạn là bất kỳ thứ gì khác.
+2

@JoshPinter nếu tôi đã tải hình ảnh qua kẹp giấy đã và muốn thêm https để url, làm thế nào sẽ nói với cái kẹp giấy đó? Có một lựa chọn mà tôi không phải tải lên tất cả các hình ảnh của tôi một lần nữa. – Moosa

+1

@Moosa Bạn không cần phải tải lên lại chúng nếu bạn chỉ thay đổi giao thức để sử dụng 'https'. Nó chỉ nên hoạt động. Hãy thử nó và cho tôi biết. –

+1

@JoshPinter Tôi đã thử nó nhưng nó không hoạt động - không phải mã has_attached chỉ được gọi trong khi tải lên? nếu có, làm thế nào nó hoạt động trên các hình ảnh hiện có ?. Tuy nhiên, ngay cả video tải lên mới không trỏ tới https. Trên S3, url hình ảnh hiển thị dưới dạng https nhưng trang web của tôi hiển thị dưới dạng http. Không chắc chắn lý do tại sao. www.outfitadditions.com. – Moosa

22

Để cập nhật mã của bạn chỉ nói, thêm: s3_protocol như sau:

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" 
Các vấn đề liên quan