【问题标题】:Protect images uploaded with Carrierwave保护使用 Carrierwave 上传的图像
【发布时间】:2014-03-27 02:16:07
【问题描述】:

我正在建立一个网站,我想保护某些图片不被下载。只有授权用户才能下载它们。

当我使用 Carrierwave 上传图像时,它们存储在 public/uploads/image 中。用户可以通过链接下载:

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

如何保护image 文件夹中的图像,使未经授权的用户无法访问它们?假设users 表有布尔列authorized

最好的方法是什么?

EDIT1:

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

【问题讨论】:

  • 不要将它们存储在公用文件夹中 - 将它们存储在文件系统的其他位置。
  • @sevenseacat,谢谢。问题是我需要一些可用于公开展示的图像版本,那么我该如何实现呢?我可以将不同的图像版本存储到不同的位置吗?我想在公用文件夹中存储一些缩略图,在私人文件夹中存储一些原件。

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


【解决方案1】:

通常,carrierwave 将图像存储在 public/uploader 目录中。

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

.

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

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

【讨论】:

  • 谢谢。但是,我现在如何才能将缩略图公之于众?有没有办法在不同的位置存储不同的图像版本?
  • 将所有缩略图存储在上面指定的公共目录中,并将您的实际图像存储在 cache_dir 并使用 retrieve_versions_from_store 检索文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
相关资源
最近更新 更多