我有一个Rails 5应用程序。我正在使用Carrierwave进行文件上传。我能够在开发和生产环境中成功上传PDF,JPG,PNG。但是,doc,docx,xls,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
回答这个问题被移除版本的拇指代码块。我的印象是:拇指在图像上可选地被调用,但似乎它在所有上传上运行。我早该知道! :/
Maruf!你是完全正确的。我有代码沿着:版本:拇指做...处理resize_to_fit:[200,200] ..结束(赦免伪代码/马虎的格式)。这是造成这个问题。我的docx和xlsx文件现在上传。谢谢! –