在 rails 4.2 中使用回形针上传非图像文件时出错

Error uploading non image files with paperclip in rails 4.2

我在通过回形针上传非图像文件时遇到此错误。

Paperclip error - 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

如果我从模型中删除样式,效果很好。但是我也需要调整图片的大小。

您需要从模型中删除样式。该错误是由于当您上传非图像文件时,回形针将此文件发送到 imageMagick 以根据指定的样式调整大小。由于文件不是图像文件,因此 imageMagick 无法将文件转换为给定的分辨率并且系统崩溃。

您可以将图像附件和非图像附件的字段分开。

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

对于图像附件字段,指定样式并且不为非图像附件指定样式。

尝试使用 before_post_process 模型挂钩。它允许您更改或取消图像处理。来自此处描述的示例 https://github.com/thoughtbot/paperclip#events

if you return false (specifically - returning nil is not the same) in a before_filter, the post processing step will halt.

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