Paperclip缺少Amazon S3的协议(https)

在production.rb中:

config.paperclip_defaults = { s3_host_name: "s3.#{ENV.fetch('AWS_REGION')}.amazonaws.com", storage: :s3, s3_credentials: { bucket: ENV.fetch('S3_BUCKET_NAME'), access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'), secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'), s3_region: ENV.fetch('AWS_REGION'), } } 

我在initializers / paperclip.rb中没有任何内容。

在我的模型中:

 class MyModel ', square: '200x200#', medium: '300x300>' } validates_attachment_content_type :photo, content_type: /\Aimage\/.*\Z/ def photo_url=(url) self.photo = URI.parse(url) end end 

然后我测试出来:

 m = Model.new m.photo_url = "https://s3.us-east-2.amazonaws.com/mybucket/sports-grill-miami.jpg" m.save! m.photo.url(:thumb) "//s3.us-east-2.amazonaws.com/mybucket/buckets/photos/000/000/005/thumb/sports-grill-miami.jpg?1495237443" 

为什么缺少HTTPS协议? 这会使我的android应用程序崩溃,因为它需要一个协议才能连接到URL。 我是否需要对URL进行硬编码或者Paperclip可以处理此问题吗?

您需要将协议明确添加到配置中:

 :s3_protocol => :https 

您需要在paperclip配置中指定方案,如下所示:

 config.paperclip_defaults = { s3_host_name: "s3.#{ENV.fetch('AWS_REGION')}.amazonaws.com", storage: :s3, :s3_protocol => :https, # <- added this s3_credentials: { bucket: ENV.fetch('S3_BUCKET_NAME'), access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'), secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'), s3_region: ENV.fetch('AWS_REGION'), } } 

:s3_protocol => :https会将方案https分配给为您的amazon s3资产生成的url。 有关详细信息,请参阅文档 。