2017-09-16 63 views
0

我有一个Rails 5应用程序。我正在使用Carrierwave进行文件上传。我能够在开发和生产环境中成功上传PDF,JPG,PNG。但是,doc,docx,xl​​s,xlsx不会上传。我得到的错误信息是:Rails 5和Carrierwave没有上传docx

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 'carrierwave-i18n' 

添加此宝石解决了这个问题,但是当我尝试上载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文件的代表,它被解释为zipped 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 

回答这个问题被移除版本的拇指代码块。我的印象是:拇指在图像上可选地被调用,但似乎它在所有上传上运行。我早该知道! :/

回答

1

如果您提供上传文件的完整代码,则很容易发现问题。但我认为你正在使用RMagick处理该文件中的图像,如调整大小,裁剪等等,因为您已包括“包括CarrierWave :: RMagick”。所以RMagick无法处理文档(doc,docx,xl​​s,xlsx)。如果您需要相同的字段来支持所有文件,那么您可以通过检查文件格式或扩展名来处理带有条件的图像,否则可以使用其他上传器来处理文档文件。

+0

Maruf!你是完全正确的。我有代码沿着:版本:拇指做...处理resize_to_fit:[200,200] ..结束(赦免伪代码/马虎的格式)。这是造成这个问题。我的docx和xlsx文件现在上传。谢谢! –

相关问题