ruby-on-rails - 如何使用carrierwave获取S3私有存储桶中对象的访问url
问题描述
我正在使用策略为“桶和对象不公开”的carrierwave将我的文件上传到s3的私有桶。
现在,当我尝试@docuemnt.pdf_file.url
在该私有存储桶中为我的对象生成访问 url 时,bucket_name is required
即使在传递存储桶名称后,我也会收到一条错误消息“”,因为@docuemnt.pdf_file.url 'privatebucketname'
我收到一条错误消息“ ArgumentError: Version privatebucketname doesn't exist!
”。
我应该如何获取 url 以使用载波从我的 rails 应用程序中访问私有存储桶对象。
我的上传代码如下:
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配置如下:
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
推荐阅读
- excel - 检查服务器是否可达
- javascript - 如何将参数传递到子函数中?
- google-cloud-platform - 将启动脚本日志推送到 gcp 中的单独文件
- sql - CURSOR 的使用会提高在 SQL 中使用 PIVOT 进行查询的性能/速度吗?
- python - Python Linux IBM Lotus Notes 9 - 导出数据库
- python - 如何使用 Python 从我的 CSV 文件生成嵌套的 JSON 数据
- c# - 外键部署到 SQL 服务器的问题 - 代码优先 - 空外键
- javascript - 在 base64 中发送更大的图像时,Nodemailer 崩溃
- git - 如何列出所有分支中每个作者的最新提交?
- vba - IBM MAXIMO:如何使用 REST API 从 PR 创建 PO