ruby-on-rails - 如何使用 carrierwave 获取 S3 私有(private)存储桶中对象的访问 url

标签 ruby-on-rails amazon-s3 carrierwave

我正在使用 carrierwave 将我的文件上传到 s3 的私有(private)存储桶,其政策是“存储桶和对象不公开”。

现在,当我尝试使用 @docuemnt.pdf_file.url 生成访问 URL 时对于我在那个私有(private)桶中的对象,即使在将 bucketname 作为 bucket_name is required 传递之后,我也会收到一条错误消息“@docuemnt.pdf_file.url 'privatebucketname' ”我收到一条错误消息“ArgumentError: Version privatebucketname doesn't exist!”。

我应该如何使用载波从我的 Rails 应用程序中获取 url 以访问私有(private)存储桶对象。

我的 uploader 代码如下:

class SecureUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick


  storage :fog

  def fog_directory
    ENV['AWS_SECURED_BUCKET']
  end

  def fog_public
    false
  end

  def fog_authenticated_url_expiration
    1.minutes # in seconds from now,  (default is 10.minutes)
  end
end

我的载波配置如下:

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider:               'AWS',
    aws_access_key_id:      ENV['AWS_KEY'],
    aws_secret_access_key:  ENV['AWS_SECRET'],
    region:                 ENV['AWS_REGION']
  }

  # For testing, upload files to local `tmp` folder.
  if Rails.env.test? || Rails.env.cucumber?
    config.storage           = :file
    config.enable_processing = false
    config.root              = "#{Rails.root}/tmp"
  else
    config.storage = :fog
  end

  config.cache_dir        = "#{Rails.root}/tmp/uploads" # To let CarrierWave work on Heroku
  config.fog_directory    = ENV['AWS_BUCKET']
end

最佳答案

我通常有一个初始化程序 carrierwave.rb 并将配置保存在那里。

CarrierWave.configure do |config|
  if Rails.env.production?
    config.fog_provider = 'fog/aws'
    config.enable_processing = true
    config.fog_directory = Rails.application.credentials.aws[:bucket]
    config.fog_public = false # optional, defaults to true
    config.fog_attributes = { "Cache-Control" => "max-age=315576000" }

    config.fog_credentials = {
      provider: "AWS",
      aws_access_key_id: Rails.application.credentials.aws[:access_key_id]
      aws_secret_access_key: Rails.application.credentials.aws[:secret_access_key]
      region: Rails.application.credentials.aws[:region]
    }
    config.storage = :fog
  else
    config.enable_processing = false
    config.storage = :file
  end
end

关于ruby-on-rails - 如何使用 carrierwave 获取 S3 私有(private)存储桶中对象的访问 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54110537/

相关文章:

ruby-on-rails - rails : elsif && conditional statement in controller action not working

java - 对输入流使用 AWS S3 加密

sql - 存储大型城市以进行自动完成查询的最佳方式是什么?

ruby-on-rails - Rails 5 CarrierWave Gem 可用于生产,但不能用于开发

ruby-on-rails - Rails : Search method breaks PostgreSQL, 替代方案?

ruby-on-rails - Jekyll:错误:无法构建网站,日期格式错误

ruby-on-rails - 查找在一周中的特定日期创建的所有记录

java - Amazon S3 文件上传不起作用 - 公共(public)读取权限

ruby-on-rails - 如何在载波中应用此转换命令? - 裁剪和圆圈

ruby-on-rails - CarrierWave:上传文件到非云服务器