在Rails中使用回形针设置原始图像的路径?

时间:2009-05-12 05:07:20

标签: ruby-on-rails ruby paperclip

情况

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

问题

我不希望公开原始(高分辨率)图像供用户使用。所以我希望有一种方法可以指定一个不同的路径来将原始文件存储在/public/之外的某个地方。理想情况下,回形针仍然可以使用原始图像作为源重新处理样式,就像当前一样。

我也愿意接受外部用户无法访问原件的其他建议。这里最实用的解决方案是什么。感谢。

2 个答案:

答案 0 :(得分:21)

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


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

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

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

答案 1 :(得分:0)

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

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

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

<FilesMatch "^\.(jpe?g|gif|png)$">
   Order allow,deny
   Deny from all
</Files>