2012-08-07 8 views
5

Potrzebuję trochę przetwarzania po przesłaniu pliku, który nie jest obrazem - w spinaczu mogę mieć niestandardowy procesor pocztowy, ale nie mogę znaleźć żadnego sposobu na zrobienie tego w nosicielu nośnym.Jak mogę utworzyć niestandardowy procesor postu?

Ruby 1.9.3, Rails 3.2.7 i CarrierWave 0.6.2.

Odpowiedz

1

Napisałem post na blogu o tym, jak stworzyć niestandardowy postprocesor, aby tworzyć miniatury filmów, może okaże się to przydatne.

https://prograils.com/posts/video-encoding-processor-for-carrierwave/

+1

Ten adres URL jest już niedostępny :( – peanut

+1

Prawda, przeniosłem go tutaj: http://blog.prograils.com/post/46154701464/video-encoding-processor-for-carrierwave –

+0

zaktualizowany link nie pracować albo ... – scientiffic

6

pytanie PO była jak przetwarzać pliki, które nie są obrazy.

Proszę spojrzeć na ten plik źródłowy na GitHub: carrierwave/lib/carrierwave/uploader/processing.rb i sprawdzić komentarze.

Musisz utworzyć własną CarrierWave uploader podklasę i zamontować go w swoim modelu tak:

def MyModel < ActiveRecord::Base 

    # this is where the uploaded file will be available in your model, 
    # as a `MyUploader` instance: 
    # 
    mount_uploader :uploaded_file, MyUploader 

    ... 
    end 

Należy pamiętać, że jest on zamontowany na atrybut ActiveRecord :uploaded_file. Oznacza to, że po uzyskaniu dostępu do modelu :uploaded_file otrzymasz egzemplarz narzędzia do przesyłania plików CarrierWave dla przesłanego pliku.

można po prostu zdefiniować przetwarzanie wewnątrz przesyłającej następująco:

class MyUploader < CarrierWave:Uploader::Base 
    process :my_custom_processing => [param1,param2,param3] 

    def my_custom_processing(param1,param2,param3) 
     ... 
     # e.g. you could call a method which is defined elsewhere, 
     # which operates on a file: 
     my_nifty_file_processor(self.uploaded_file) 
     # 
     # or you could just do this directly: 
     uploaded_data = self.uploaded_file.read 
     ... 
    end 
    end 

Wewnątrz my_nifty_file_processor, byś po prostu zadzwonić read na obiekcie, który zostanie przekazany do odczytu pliku.

CarrierWave pozwala na wywołanie read na dowolnej instancji programu Uploader (= dowolne wystąpienie przesłanego pliku) i odczyta ten plik.

Jeden więcej Wskazówka:

Czasami trzeba przejść do modelu ActiveRecord w swoim przesyłającej, na którym plik został przesłany.

Wystarczy dostęp do niego wewnątrz kodu uploader tak:

 self.model 

Pozwala to na przechowywanie dodatkowych informacji o przesłanym pliku, takie jak format, bezpośrednio w modelu AR.

+1

Dziękuję ty, znalazłem twoje wyjaśnienie bardziej istotne niż obecny najwyższy. – springloaded