Ruby on rails Rails 5和Carrierwave未上载docx

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

我有一个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 '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文件现在上传。非常感谢。