我正在使用 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/