从 rmagick 捕获错误时更改 CarrierWave 错误消息
Altering CarrierWave error message when catching error from 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
的内容而不是默认消息吗?
嗯,其实这很简单:我只需要向 i18n 添加一个字符串,就像这样:
errors.messaging.rmagick_processing_error: "Error processing image"
我正在使用 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
的内容而不是默认消息吗?
嗯,其实这很简单:我只需要向 i18n 添加一个字符串,就像这样:
errors.messaging.rmagick_processing_error: "Error processing image"