【发布时间】:2013-10-28 22:45:28
【问题描述】:
我正在使用Carrierwave 将文件上传到我的应用程序。我还使用Fog gem 将我的文件存储在S3 上,除此之外,我还在CloudFront 中为我的存储桶中的所有内容创建一个分布。
我有几个问题...
- 我需要创建“文件下载”,所以我需要编辑
response-content-disposition。似乎是(查看示例),这已经可以使用 Fog 或 Carrierwave 完成......但是当我尝试像文档所说的那样传入url(20, :query => { "response-content-disposition" => "xyz" })时(20 是过期时间),它声明它只期望一个争论。所以我的问题是,如何设置 URL 的过期时间?
在那里我找不到任何东西后,我尝试了authenticated_url,它也只需要 1 个参数,并将过期时间设置为 10 分钟。我确定我可以在配置中全局设置它,但我不知道为什么我不能在每个链接的基础上设置它?
这是我目前的代码:
def download_link(download)
file = download.filename.file
filename = file.filename
extension = file.extension
options = {
:query => {
"response-content-type" => download_content_type(extension),
"response-content-disposition" => "attachment; filename=#{filename}"
}
}
file.authenticated_url(options)
end
- 据我了解,我不能同时拥有私有和公共的 CF 分发。我可以将我的下载链接全部设为私有,但我网站上的图片也托管在这里......这意味着我网站上的每张图片都需要一个经过身份验证的 URL。我想这不会那么糟糕,除非以后我想缓存,这将是一个问题。所以,我想我最好的选择是为公开的图像制作一个新的存储桶?
【问题讨论】:
-
是的,一个新的/独立的存储桶和非私有的分发可能是公共图像的最佳选择。
-
你应该可以通过设置fog_authenticated_url_expiration来修改过期时间。不太清楚为什么它不是每个链接,我猜这种方式更方便?大多数用例似乎都确定了一个有效期(我反正见过的)。
标签: ruby-on-rails amazon-web-services amazon-s3 carrierwave fog