2012-12-14 6 views
5

Sto sviluppando l'app Rails 3.2.9 e utilizzo di Carrierwave come file uploader. Il readme Carriverwave sottolineare il modo per ottenere corretto content_type:carrierwave content_type sempre nil

  1. Add richiede 'carrierwave/elaborazione/mime_types' a un inizializzatore o il vostro uploader (s).
  2. Aggiungi include CarrierWave :: MimeTypes al tuo uploader.
  3. Aggiungi processo: set_content_type al tuo uploader (s).

Base su questo, mio ​​uploader è qui sotto:

# 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 

Nel mio modello, montare l'uploader in formato:

mount_uploader :file, AttachmentUploader 

Tuttavia, ho sempre avuto zero content_type dopo file di caricamento:

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> 

Qualche suggerimento? Grazie.

PS: ho già aggiunto gem "mime-types", "~> 1.19" nel mio Gemfile.

risposta

0

Ho appena raggiunto lo stesso identico problema e non sono riuscito a trovare una soluzione facile.

mia soluzione era quello di aggiungere una colonna content_type al modello e metterlo nel processo di creazione/aggiornamento con

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

Questo funziona, anche se speriamo che il problema venga risolto.

1

avuto lo stesso problema ha provato questo nel mio modello file in cui ho montato l'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 

Nota: è necessario disporre di un campo di tipo MIME nella tabella