2017-09-16 53 views
0

私は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' 

は、問題を解決し、

Upfile Failed to manipulate with rmagick, maybe it is not an image? 

は、だから私はに進ん:私はDOCXファイルをアップロードしようとするが、その後、私は別のエラーメッセージが表示されます。このエラーをデバッグします。多分私のImageMagickライブラリが不完全で、私にdocxファイルを認識させる代理人がないと思っています。私が実行して代表団を見て:

convert -list configure 

端末はその後、私を示しています

私が代表者で観察するものと
DELEGATES  bzlib mpeg freetype gslib jng jpeg lcms lzma png ps tiff xml zlib 

、私はDOCX、DOC、xlssを読み取るために必要なすべてのコンポーネントを持っています、 xlsなど(私はxmlがzip xmlとして解釈されるdocxファイルを読むことを可能にする代理人だと信じています)。これが私の検索が終わる場所です。ここから解決策を見つけてもらえますか?


[回答あり] 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

アップローダーファイルの完全なコードを指定すると、問題を簡単に見つけることができます。しかし、私は、あなたが "CarrierWave :: RMagickをインクルード"したように、RMagickを使って、そのファイルのサイズ変更、トリミングなどのイメージを処理していると思います。したがって、RMagickはドキュメント(doc、docx、xls、xlsx)を処理できません。すべてのファイルをサポートするために同じフィールドが必要な場合は、ファイル形式または拡張子を確認して条件付きイメージを処理できます。そうでない場合は、ドキュメントファイル用に別のアップローダを使用できます。

+0

Maruf!あなたはまったく正しい。 version:thumb do ... process resize_to_fit:[200、200] .. end(擬似コード/擬似フォーマットを赦してください)。これは問題を作り出していました。私のdocxとxlsxファイルがアップロードされるようになりました。ありがとうございました! –

関連する問題