2012-12-14 6 views
5

Ich entwickle die Rails 3.2.9 App und benutze Carrierwave als Datei-Uploader. Die Carriverwave readme den Weg weisen darauf hin, richtig content_type zu erhalten:carrierwave content_type immer null

  1. Add 'carrierwave/Verarbeitung/mime_types' zu einem Initialisierer oder Ihre Uploader (n) benötigen.
  2. Fügen Sie CarrierWave :: MimeTypes zu Ihrem Uploader hinzu.
  3. Fügen Sie den Prozess: set_content_type zu Ihren Uploader (n) hinzu.

Base auf das, Mein Uploader unten:

# 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 

In meinem Modell, montieren Sie die Uploader als Datei:

mount_uploader :file, AttachmentUploader 

Aber ich bekam content_type nil immer nach dem Upload-Datei:

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> 

Irgendwelche Vorschläge? Vielen Dank.

PS: Ich habe bereits gem "mime-types", "~> 1.19" in meinem Gemfile hinzugefügt.

Antwort

0

Ich traf genau das gleiche Problem und konnte keine einfache Lösung finden.

Meine Abhilfe war eine content_type Spalte zum Modell hinzufügen und legen Sie es in dem/erstellen Update-Prozess mit

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

Dies funktioniert, wenn auch hoffentlich das Problem behoben wird.

1

hatte das gleiche Problem versucht, dies in meinem Modell Datei, wo ich den Uploader

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 

Hinweis angebracht: Sie müssen in der Tabelle einen MIME-Typ Feld haben