Carrierwave雾无法显示Amazon S3图像

我已经安装了载波和雾,已成功上传图像并第一次查看它们,但现在它不再显示图像了。

这是我的配置文件 app / config / initializers / carrierwave.rb

CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS', # required :aws_access_key_id => 'AKIAJKOHTE4WTXCCXAMA', # required :aws_secret_access_key => 'some secret key here', # required :region => 'eu-east-1', # optional, defaults to 'us-east-1' :host => 'https://s3.amazonaws.com', # optional, defaults to nil :endpoint => 'https://s3.amazonaws.com:8080' # optional, defaults to nil } config.fog_directory = 'createmysite.co.za' # required config.fog_public = false # optional, defaults to true #config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {} end 

这是应该显示的图像的url外观

 Normal_selection_003 

当我打开图像url时,这是来自amazon的输出 https://createmysite.co.za.s3.amazonaws.com/uploads/portfolio/image/3/normal_Selection_003.png?AWSAccessKeyId=AKIAJKOHTE4WTXCCXAMA&Signature=8PLq8WCkfrkthmfVGfXX9K6s5fc%3D&Expires=1354859553

  AccessDenied Access Denied 3F179B7CE417BC12  zgh46a+G7UDdpIHEEIT0C/rmijShOKAzhPSbLpEeVgUre1iDc9f7TSOwaJdQpR65   

更新

新配置文件(添加雾URL到期) app / config / initializers / carrierwave.rb

 CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS', # required :aws_access_key_id => 'AKIAJKOHTE4WTXCCXAMA', # required :aws_secret_access_key => 'chuck norris', # required } config.fog_directory = 'createmysite.co.za' # required config.fog_public = false # optional, defaults to true config.fog_authenticated_url_expiration = 600 # (in seconds) => 10 minutes end 

奇迹般有效!

您已将config.fog_public设置为false并使用Amazon S3进行存储。 通过S3的私人文件的URL是临时的(它们已签名且有效期)。 具体而言,您的问题中发布的URL具有Expires=1354859553参数。

1354859553Fri, 07 Dec 2012 05:52:33 GMT ,这是从当前时间过去,所以链接已经有效过期,这就是为什么你得到Access Denied错误。

您可以通过设置进一步调整到期时间(默认值为600秒)

 config.fog_authenticated_url_expiration = ... # some integer here 

如果你想要非过期的链接

  • config.fog_public设置为true
  • 让你的应用程序充当中间人,通过send_file提供文件。 这里至少有一个关于SO的问题