【问题标题】:Set path for original images using paperclip in Rails?在 Rails 中使用回形针设置原始图像的路径?
【发布时间】:2009-05-12 05:07:19
【问题描述】:

情况

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

问题

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

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

【问题讨论】:

  • 您也可以简单地将 :processors => [] 传递给 has_attached_file 调用吗?

标签: ruby-on-rails ruby paperclip


【解决方案1】:

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


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

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

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

【讨论】:

  • 谢谢,这正是我想要的。实际上我不得不从 Github 获取最新的 Paperclip,因为我过时的版本还没有插值方法:)
【解决方案2】:

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

  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>

【讨论】:

  • 我已经 :full 设置为默认样式。它不会跳过保存原件,它只是设置 @foo.image.url 返回的不带参数的样式,默认为 :original。这样您就不必一直使用@foo.image.url(:full) 指定样式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
相关资源
最近更新 更多