2014-02-25 69 views
1

我正在构建一个网站,我希望保护某些图像免于下载。只有授权用户才能下载它们。保护使用Carrierwave上传的图像

当我使用Carrierwave上传图像时,它们被存储在public/uploads/image之内。

def transmit 
    send_file(Rails.root.join('public' , 'uploads', 'image', filename.to_s) 
end 

如何保护内部image文件夹,使未经授权的用户的图像不能访问它们:用户可以通过链接下载呢?假设users表具有布尔列authorized

什么是最好的方法来做到这一点?

EDIT1:

我知道我可以让before_action它不会允许未经授权的用户通过下载链接下载它,但如果用户知道路径在哪里存储图像的文件夹的图像仍然可以访问。

+1

不要将它们存储在公用文件夹 - 它们存储在文件系统中的其他地方。 – sevenseacat

+0

@sevenseacat,谢谢。问题是我需要一些版本的图像供公众展示,所以我该如何做到这一点?我可以将不同的图像版本存储到不同的位置?我想有一些缩略图存储在公用文件夹和私人文件夹内的原件。 – user3339562

回答

2

通常载波图像存储在公共/上传目录中。

def store_dir 
'public/my/upload/directory' 
end 

如果您存储项目的根文件夹以外的文件,你可能想用同样的方式来定义的cache_dir:

class MyUploader < CarrierWave::Uploader::Base 
    def cache_dir 
    '/tmp/projectname-cache' 
    end 
end 
+0

谢谢。但是,我现在如何可以向公众提供缩略图?有没有办法在不同的位置存储不同的图像版本? – user3339562

+0

将上述所有拇指存储在公共目录中,并将您的实际图像存储在cache_dir中,并使用retrieve_versions_from_store检索文件 – santosh

相关问题