我有一個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文件現在上傳。謝謝! –