2017-09-16 58 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文件現在上傳。謝謝! –

相關問題