2012-08-07 8 views

Respuesta

1

Escribí una publicación de blog sobre cómo crear post-procesador personalizado para crear miniaturas de videos, tal vez lo encuentre útil.

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

+1

Esta url ya no está disponible :( – peanut

+1

Es cierto, la he movido aquí: http://blog.prograils.com/post/46154701464/video-encoding-processor-for-carrierwave –

+0

el enlace actualizado no lo hace trabaja bien ... – scientiffic

6

La pregunta del PO era cómo procesar los archivos que no son imágenes.

Por favor, eche un vistazo a este archivo fuente en GitHub: carrierwave/lib/carrierwave/uploader/processing.rb y revise los comentarios.

Tendrás que crear su propio cargador CarrierWave sub-clase y lo monta en su modelo como este:

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 

Tenga en cuenta que está montado en el atributo ActiveRecord :uploaded_file. Esto significa que cuando acceda al :uploaded_file desde su modelo, obtendrá una instancia de su cargador de CarrierWave para el archivo particular que se cargó.

Simplemente puede definir su procesamiento dentro de su cargador de la siguiente manera:

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 

Dentro my_nifty_file_processor, sólo tendría que llamar read en el objeto que se pasa a leer el archivo.

CarrierWave le permite llamar al read en cualquier instancia de Uploader (= cualquier instancia de un archivo cargado) y leerá ese archivo.

Uno más Consejo:

En ocasiones resulta necesario tener acceso al modelo ActiveRecord dentro de su cargador, para el que se carga el archivo.

Para trabajar con él dentro de su código de cargador de la siguiente manera:

 self.model 

Esto le permite almacenar información adicional acerca del archivo subido, como el formato, directamente en su modelo AR.

+1

Gracias usted, encontré su explicación más relevante que la superior actual. – springloaded

Cuestiones relacionadas