保护使用Carrierwave上传的图像

时间:2014-02-25 04:05:56

标签: ruby-on-rails ruby-on-rails-4 carrierwave sendfile

我正在构建一个网站,我希望保护某些图片免遭下载。只有授权用户才能下载它们。

当我使用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 个答案:

答案 0 :(得分:2)

通常,carrierwave将图像存储在公共/上传目录中。

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

如果将文件存储在项目根文件夹之外,则可能需要以相同的方式定义cache_dir:

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