Ruby on rails Rails 5和Carrierwave未上载docx
我有一个Rails 5应用程序。我用Carrierwave上传文件。我能够在开发和生产环境中成功上传PDF、JPG、PNG。但是,doc、docx、xls、xlsx不上传。我收到的错误消息是:Ruby on rails Rails 5和Carrierwave未上载docx,ruby-on-rails,ruby,file-upload,imagemagick,carrierwave,Ruby On Rails,Ruby,File Upload,Imagemagick,Carrierwave,我有一个Rails 5应用程序。我用Carrierwave上传文件。我能够在开发和生产环境中成功上传PDF、JPG、PNG。但是,doc、docx、xls、xlsx不上传。我收到的错误消息是: Upfile Failed to manipulate with rmagick, maybe it is not an image? Upfile是我的数据库列的名称,代表uploadedfile 我将向您介绍我的设置以及我为解决此问题所采取的步骤: 我有这些宝石: gem "rmagick" gem
Upfile Failed to manipulate with rmagick, maybe it is not an image?
Upfile是我的数据库列的名称,代表uploadedfile
我将向您介绍我的设置以及我为解决此问题所采取的步骤:
我有这些宝石:
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?
所以我继续调试这个错误。我认为也许我的IMAGEMAGIK库是不完整的,并且缺少一个允许我识别DOX文件的委托。我通过跑步来观察学员:
convert -list configure
然后,终端向我显示:
DELEGATES bzlib mpeg freetype gslib jng jpeg lcms lzma png ps tiff xml zlib
从我对代表的观察来看,我拥有读取docx、doc、xlss、xls等所需的所有组件。我相信xml是允许我读取docx文件的代表,该文件被解释为压缩xml?。我的搜索到此结束。请帮我从这里找到解决方案
[找到答案]多亏了马鲁夫,我才找到了答案。我的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
此问题的答案是删除版本代码块。我的印象是:thumb可以在图像上随意调用,但它似乎可以在所有上传上运行。我早该知道的!:/ 如果您提供上传程序文件的完整代码,就很容易发现问题。但我认为您正在使用RMagick处理该文件中的图像,如调整大小、裁剪等,正如您包括的CarrierWave::RMagick。因此RMagick无法处理文档doc、docx、xls、xlsx。如果您需要相同的字段来支持所有文件,那么您可以通过检查文件格式或扩展名来处理有条件的图像,否则您可以使用另一个上载器来上载文档文件 马鲁夫!你完全正确。我的代码大致如下:version:thumb do…process resize_to_fit:[200200]…end请原谅伪代码/草率格式。这造成了问题。我的docx和xlsx文件现在上传。非常感谢。