2012-12-14 11 views
5

私はRails 3.2.9アプリを開発しており、ファイルアップローダとしてCarrierwaveを使用しています。 Carriverwaveのreadmeは正しいCONTENT_TYPEを取得する方法を指摘:carrierwave content_type always nil

  1. は、初期化子またはあなたのアップローダー(複数可)に「carrierwave /処理/ mime_types」を必要と追加します。
  2. アップローダーにCarrierWave :: MimeTypesを追加します。
  3. プロセスを追加:set_content_typeをあなたのアップローダに追加します。

この上の基地、私のアップローダーは以下の通りです:私のモデルでは

# encoding: utf-8 
require 'carrierwave/processing/mime_types' 
class AttachmentUploader < CarrierWave::Uploader::Base 
    include CarrierWave::MimeTypes 
    storage :file 
    def store_dir 
    "#{base_store_dir}/#{model.id}" 
    end 
    process :set_content_type 

end 

、ファイルとしてアップローダーをマウントします。

mount_uploader :file, AttachmentUploader 

しかし、私はいつも、アップロードファイルの後にnilをCONTENT_TYPEを得ました:

1.9.3-p327 :013 > a.file.class 
=> AttachmentUploader 
1.9.3-p327 :010 > a.file.file 
=> #<CarrierWave::SanitizedFile:0x00000004046330 @file="uploads/course/000/000/026/attachment_file/6/myIcon.png", @original_filename=nil, @content_type=nil> 

ご提案がありますか?ありがとう。

PS:Gemfileにはすでにgem "mime-types", "~> 1.19"が追加されています。

答えて

0

私はまったく同じ問題にぶつかり、簡単に修正することができませんでした。

私の問題を回避するには、モデルにCONTENT_TYPE列を追加し、

@model.content_type = params[:file_upload][:attachment].content_type 

うまくいけば、問題が修正されますが、これは、作品を作成/更新プロセスでそれを設定することでした。

1

のようなセットアップあなたのアップローダファイルが同じ問題が私のモデルでこれをしようとした、MIMEタイプの宝石を追加します。私はアップローダを搭載し

before_save :set_mime_type     

    def set_mime_type 
     self.mimetype = Mime::Type.lookup_by_extension(File.extname(self.cf_filename.to_s)[1..-1]) 
    end 

注どこファイル:あなたがテーブル内のMIMEタイプのフィールドを持っている必要があります