8

情况

我有一个简单的模型,带有一个使用回形针的附加图像,它有几个经过处理的样式(缩略图、完整、功能)。此时它可以正常工作,并为 中的每个对象创建一个目录结构/public/assets/foo/,其中包含原始、缩略图、完整和功能的子目录。

问题

我不希望将原始(高分辨率)图像暴露给用户获取。所以我希望有一种方法可以指定不同的路径来将原件存储在/public/. 理想情况下,回形针应该仍然能够使用原始图像作为源重新处理样式,就像它目前所做的那样。

对于使外部用户无法访问原件的替代建议,我也持开放态度。这里最实用的解决方案是什么。谢谢。

4

2 回答 2

22

我建议使用自定义插值,将您的原始文件放在公共目录之外。像这样的东西:


Paperclip.interpolates :maybe_public do |attachment, style|
  style == :original ? "private" : "public"
end

has_attached_file :image, :path => ":rails_root/:maybe_public/:attachment..."

这会将您的 :original 文件保存在不可公开访问的目录中以进行保护,但仍允许 Paperclip 访问。它会将您的缩略图保存在公共目录中以进行标准访问。

于 2009-05-12T13:23:39.430 回答
0

如果可以接受,您可以通过设置默认样式跳过保存原件。

  has_attached_file :image,
                    :styles => { :normal => "800x600>" },
                    :default_style => :normal

如果没有,并且您想保留原件,如果您使用的是 apache,则可以使用 .htaccess 文件来限制对 originals 目录的访问

<FilesMatch "^\.(jpe?g|gif|png)$">
   Order allow,deny
   Deny from all
</Files>
于 2009-05-12T07:18:32.327 回答