我有一个Rails 5应用程序。我正在使用Carrierwave进行文件上传。我能够成功上传开发和生产环境,PDF,JPG,PNG。但是,doc,docx,xls,xlsx不上传。我得到的错误信息是:
Upfile Failed to manipulate with rmagick, maybe it is not an image?
Upfile是我的数据库列的名称(代表上传文件)。
我将引导您完成我的设置以及我为解决此问题所采取的步骤:
我有这些宝石:
gem "rmagick"
gem 'carrierwave', '~> 1.0'
gem 'fog'
在我的CarrierWave上传器文件中,我打电话给:
include CarrierWave::RMagick
storage :fog
我可以上传pdf,png和jpg格式。
但是,当我上传docx文件时,收到此错误消息:
Upfile translation missing: en.errors.messages.rmagick_processing_error
要修复此错误消息,我添加此gem:
gem 'carrierwave-i18n'
添加此gem可以解决问题,但是当我尝试上传docx文件时,收到了不同的错误消息:
Upfile Failed to manipulate with rmagick, maybe it is not an image?
所以我继续调试这个错误。我认为可能我的ImageMagick库不完整,并且缺少允许我识别docx文件的委托。我通过运行来查看代表:
convert -list configure
终端然后告诉我:
DELEGATES bzlib mpeg freetype gslib jng jpeg lcms lzma png ps tiff xml zlib
根据我对代表的观察,我有阅读docx,doc,xlss,xls等所有必要的组件。(我相信xml是允许我读取docx文件的委托,它被解释为压缩文件XML?)。这是我的搜索结束的地方。请帮我从这里发现解决方案?
[发现答案]感谢Maruf,我找到了答案。我在我的PDF上传器文件中的代码是(原谅pdfuploader命名法 - 我计划仅将其用于pdf,但随后引入了Word和Excel格式):
class PdfUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :thumb do
process resize_to_fit: [200, 200]
end
def extension_whitelist
%w(pdf doc html docx jpg jpeg gif png txt mp3 xls xlsx)
end
end
此问题的答案是删除版本缩略图代码块。我的印象是:拇指在图像上可选择调用,但它似乎在所有上传中运行。我早该知道! :/
答案 0 :(得分:1)
如果您提供上传者文件的完整代码,则很容易找到问题所在。但是我认为你正在使用RMagick处理图像,比如在文件中调整大小,裁剪等,因为你已经包含了#34;包括CarrierWave :: RMagick&#34;。所以RMagick无法处理文档(doc,docx,xls,xlsx)。如果您需要相同的字段来支持所有文件,那么您可以通过检查文件格式或扩展名来处理具有条件的图像,否则您可以使用另一个上传器来处理文档文件。