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.
Esta url ya no está disponible :( – peanut
Es cierto, la he movido aquí: http://blog.prograils.com/post/46154701464/video-encoding-processor-for-carrierwave –
el enlace actualizado no lo hace trabaja bien ... – scientiffic