我已经构建了一个应用程序,部署在 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
显然这可以完成这项工作,但使用普通的浏览器开发工具,每个人都会看到谷歌存储桶的路径,并且能够访问所有文件。
您是否知道如何解决此问题,甚至可以为开发人员使用谷歌存储?
提前致谢,