Ruby on Rails中Paperclip gem的WebP图片上传问题求助
解决Rails 4.2 + Paperclip 4.2.4无法上传WebP图片的问题
问题原因
Paperclip 4.2.4版本的ImageSpec组件默认未将WebP纳入支持的图片格式列表,即使你的ImageMagick 6.9.10-23本身支持WebP,也会触发格式不支持的报错。
修复步骤
1. 确认ImageMagick对WebP的支持
先在终端执行以下命令,验证ImageMagick是否能识别WebP:
identify -list format | grep WEBP
如果输出包含WEBP* rw-字样,说明ImageMagick已支持WebP;如果没有,需重新编译安装ImageMagick并启用WebP支持。
2. 扩展Paperclip的ImageSpec支持WebP
在项目的config/initializers目录下新建paperclip_webp_support.rb文件,添加以下代码:
# 让ImageSpec识别WebP格式 Paperclip::ImageSpec.class_eval do def valid_image? return true if @file.extname.downcase == '.webp' begin @geometry ||= Paperclip::Geometry.from_file(@file) @geometry.width > 0 && @geometry.height > 0 rescue Paperclip::Errors::NotIdentifiedByImageMagickError false end end end # 注册WebP媒体类型 Paperclip::MediaTypeRegistry.register('image/webp', '.webp')
3. 更新Attachment配置允许WebP
在你的模型中,修改has_attached_file的验证规则,添加WebP的content type:
class User < ActiveRecord::Base has_attached_file :avatar, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png" validates_attachment_content_type :avatar, content_type: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'] end
4. 验证并重启服务器
- 重启Rails服务器
- 测试上传WebP图片,确认报错消失
内容的提问来源于stack exchange,提问作者SRIKI R
相关产品推荐
相关产品推荐

