从rmagick捕获错误时更改CarrierWave错误消息

时间:2016-08-11 09:08:21

标签: ruby-on-rails file-upload carrierwave rmagick

我正在使用CarrierWave + rmagick gems将图像上传到服务器。当我上传普通文件时,一切都很顺利。但是当我上传格式错误的文件时,表单错误不会显示CarrierWave错误,它会显示运行rmagick时出现的错误。

一个简单的例子。我有User模型,里面有一个上传者:

class User < ActiveRecord::Base
  ...
  mount_uploader :avatar, PictureUploader
end

avatar是一个字符串field

现在,上传者在这里定义:

class BaseImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  storage :fog

  def extension_white_list
    %w(jpg jpeg gif png)
  end
end


class PictureUploader < BaseImageUploader
  def default_url
    'placeholder.png'
  end

  def store_dir
    'images/pictures'
  end

  version :thumb do
    process resize_to_fit: [50, 50]
  end

  version :medium do
    process resize_to_fill: [400, 400]
  end

  version :small_square do
    process resize_to_fill: [200, 200]
  end
end

然后我创建了一个空文件,例如touch ~/Desktop/file.jpg,并尝试通过表单上传,这里我收到验证错误:

Avatar Failed to manipulate with rmagick, maybe it is not an image? Original Error: Empty input file `<foldername>/public/uploads/tmp/1470905765-10111-5893/thumb_file.jpg' @ error/jpeg.c/JPEGErrorHandler/322

我尝试使用ming_magick而不是rmagick,但结果是一样的(错误信息略有不同)

我可以做些什么来改变此验证消息,说出Avatar Your image is invalid而不是默认值吗?

1 个答案:

答案 0 :(得分:0)

嗯,实际上这很简单:我只需要在i18n中添加一个字符串,就像那样:

errors.messaging.rmagick_processing_error: "Error processing image"