在Rails 4.2中使用Paperclip上传非图片文件时出现错误

3

我使用Paperclip上传非图片文件时出现了以下错误:

Paperclip错误 - NotIdentifiedByImageMagickError

这是我的模型代码:

has_attached_file :attachment, :styles => { :medium => "236x236>", :thumb => "150x150>", :large => "1000x500" }

这是我的宝石版本:paperclip(4.2.1)activemodel(≥3.0.0)activesupport(≥3.0.0)cocaine(〜>0.5.3)mime-types 如果从模型中删除样式,则可以正常工作。但我还需要调整图像大小。
2个回答

2
尝试使用before_post_process模型钩子。它允许您更改或取消图像处理。这里描述了一个示例https://github.com/thoughtbot/paperclip#events 如果您在before_filter中返回false(具体来说-返回nil不同),则后处理步骤将停止。
class Message < ActiveRecord::Base
  has_attached_file :asset, styles: {thumb: "100x100#"}

  before_post_process :skip_for_audio

  def skip_for_audio
    ! %w(audio/ogg application/ogg).include?(asset_content_type)
  end
end

顺便说一句,如果有人想知道,这种方法完美地运作,我已经在生产中使用了几周。 - animatedgif

1
您需要从模型中删除样式。错误是因为当您上传非图像文件时,Paperclip会根据指定的样式将此文件发送到ImageMagick进行调整大小。由于该文件不是图像文件,因此ImageMagick无法将文件转换为给定分辨率,系统崩溃了。
您可以为图像和非图像附件分别设置字段。
has_attached_file :image_attachment, :styles => { :medium => "236x236>", :thumb => "150x150>", :large => "1000x500" }
has_attached_file :attachment

对于图像附件字段,请指定样式,而对于非图像附件,请不要指定样式。

谢谢你的回答,但是这并不能帮助我,因为我不能为图片和非图片附件设置单独的列。 - Akhil Latta

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