1

我已经构建了一个应用程序,部署在 heroku 上,它使用carrierwave 来保存所有上传的文件,我已经为开发人员设置了谷歌存储来保存这些文件。

直到这里一切正常,但我想保持文件显示为私有,即。用户必须有权查看。在开发环境中,一切都运行良好。

为了对用户隐藏文件源 URL,我做出了以下决定:

初始化程序/carrierwave.rb

CarrierWave.configure do |config|
  if Rails.env.production?
    config.storage = :fog
    config.fog_credentials = {
      :provider                         => 'Google',
      :google_storage_access_key_id     => 'xxx',
      :google_storage_secret_access_key => 'yyy'
    }
    config.fog_directory = 'wwww'
  else
    config.storage = :file
  end
end

控制器

这将获取文件内容以隐藏其路径和名称不让公众看到

def get_file
  if Rails.env.production?
    redirect_to URI.encode @media_asset.attachment_url
  else
    send_file ("public/"+@media_asset.attachment_url.to_s), 
          :type => @media_asset.attachment_content_type,
          :length => @media_asset.attachment_file_size,
          :status => "200 OK",
          :x_sendfile => true,
          :filename => "media_asset",
          :disposition => 'inline'
  end
end

显然这可以完成这项工作,但使用普通的浏览器开发工具,每个人都会看到谷歌存储桶的路径,并且能够访问所有文件。

您是否知道如何解决此问题,甚至可以为开发人员使用谷歌存储?

提前致谢,

4

2 回答 2

0

您的用户有 Google 帐户吗?如果是这样,您可以使用经过身份验证的下载机制:

https://developers.google.com/storage/docs/authentication#cookieauth

于 2012-02-01T01:36:01.067 回答
0

您可以使用新发布的签名 URL 功能 (https://developers.google.com/storage/docs/accesscontrol#Signed-URLs) 在 Google Cloud Storage 中执行此操作。

于 2012-03-21T00:35:32.617 回答