Paperclip只处理图片文件

11

我希望能够使用一个单一的文件字段来处理多种格式。我的理解是,Paperclip足够聪明,只会对图像进行缩放而不会影响其他格式,但是对于flv文件似乎并不起作用(会返回imagemagick/identify错误)。有没有办法帮助Paperclip一下,并显式地设置特定格式进行缩放呢?

更新: 显然,使用:whiny => false可以避免这些错误(感谢fl00r),这对于常规上传功能非常有效。 然而,我在这里尝试的是通过FTP上传文件,然后通过代码创建一个新记录,在附件参数中使用File.new([:path])。这对于图像来说效果很好,但是:whiny => false技巧就无法奏效了。有没有人有关于这方面的提示呢?

2个回答

13

:whiny选项设置为false:

has_attached_file :my_attach, :whiny => false ...

它不会帮助peparclip仅处理图像,但如果处理失败,它也不会抛出错误。

更新:

仅用于图像处理:

has_attached_file :file, 
  :styles => lambda{ |a| ["image/jpeg", "image/png"].include?( a.content_type ) ? { :small => "90x90#" } : {}  }

你可以将更多的内容类型添加到["image/jpeg", "image/png"]数组中。


不知何故,数组包含方法一直抛出“ NoMethodError(undefined method `each' for false:FalseClass)”错误,所以我不得不用肮脏的方式来解决它。但至少它能工作了,再次感谢。 - Jpunt
看起来这个问题与样式无关。 - fl00r
这就是我想的..现在可用,但我会继续寻找这个错误所在。 - Jpunt

3
你也可以使用Paperclip的回调函数来进行图像后处理,并指示Paperclip只处理图像文件。如果before_post_process回调函数返回false,则处理将停止。
    before_post_process :process_only_images

    def process_only_images
     %w(image/jpeg, image/png,image/gif,image/pjpeg, image/x-png).include?(attachment_content_type)
    end

请查看paperclip的文档以获取更多详细信息:https://github.com/thoughtbot/paperclip#events

我喜欢这种方法,但是代码不太正确:%w(image/jpeg image/png, image/gif image/pjpeg image/x-png).include?(attachment_content_type) - Dan Hixon
2
你必须小心,这不是使用%w声明数组的方法。请改用以下代码:%w(image/jpeg image/png image/gif image/pjpeg image/x-png).include?(resource_content_type) - fenec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接