草庐IT

ruby-on-rails - Carrierwave fog Amazon S3 图像不显示

coder 2025-05-03 原文

我已经安装了carrierwave和fog,已经成功上传图片并第一次查看了,但是现在它不再显示图片了。

这是我的配置文件 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 看起来的样子

<img alt="Normal_selection_003" src="https://createmysite.co.za.s3.amazonaws.com/uploads/portfolio/image/3/normal_Selection_003.png?AWSAccessKeyId=AKIAJKOHTE4WTXCCXAMA&amp;Signature=8PLq8WCkfrkthmfVGfXX9K6s5fc%3D&amp;Expires=1354859553">

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

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>3F179B7CE417BC12</RequestId>
<HostId>
zgh46a+G7UDdpIHEEIT0C/rmijShOKAzhPSbLpEeVgUre1iDc9f7TSOwaJdQpR65
</HostId>
</Error>

更新

新的配置文件(添加了 fog url expiry)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 的私有(private)文件的 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 提供文件。 <强> Here 至少有一个关于 SO 的问题涵盖了这一点

关于ruby-on-rails - Carrierwave fog Amazon S3 图像不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13757671/

有关ruby-on-rails - Carrierwave fog Amazon S3 图像不显示的更多相关文章

随机推荐