使用S3 / CloudFront雾化经过身份验证的URL

时间:2013-10-18 15:31:11

标签: ruby-on-rails amazon-web-services amazon-s3 carrierwave fog

我正在使用Carrierwave将文件上传到我的应用。我还使用Fog gem将我的文件存储在S3上,最重要的是,我正在CloudFront为我内容中的所有内容创建一个分发。

我有几个问题......

  1. 我需要创建“文件下载”,因此我需要修改response-content-disposition。它似乎是(看一些例子),这已经可以用Fog或Carrierwave完成......但是当我尝试传入url(20, :query => { "response-content-disposition" => "xyz" })时,就像文档说的那样(20是过期时间),它表明它只是期待一个论点。所以我的问题是,如何设置URL的过期时间?
  2. 在我找不到任何内容后,我尝试了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  
    
    1. 我的理解是,我不能拥有私人和公共的CF分配。我没有任何问题使我的下载链接全部私有,但我网站上的图像也在这里托管...这意味着我网站上的每个图像都需要一个经过身份验证的URL。我想这不会那么糟糕,除非我稍后想要缓存,这将是一个问题。所以,我想在这里我最好的选择是为公开的图像制作一个新的存储桶?

1 个答案:

答案 0 :(得分:1)

我想也许我上面回答了,但为了答案而不是评论:

  1. 我认为您应该可以通过在carrierwave配置中设置fog_authenticated_url_expiration来修改到期日期。
  2. 是的,如果你想要单独的公共文件,你应该只有一个单独的存储桶,可能还有分发。
  3. 你从这个authenticated_url中退出了什么?听起来这不是你所期望的,但知道它应该有什么帮助。
  4. 感谢。