2012-07-25 15 views
12

Estoy desarrollando una aplicación Ruby on Rails que requiere la carga/descarga de archivos. Para la parte de carga utilicé el gem carrierwave ya que es muy fácil de usar y flexible. El problema es: una vez que cargué el archivo, necesito saber algunas cosas: es decir, si se trata de un archivo PDF en lugar de descargar el archivo, lo muestro en línea, y lo mismo ocurre con una imagen. ¿Cómo obtengo la extensión de archivo y cómo puedo hacerlo a enviar el archivo a un usuario? Cualquier comentario es apreciado ¡Gracias!Carrierwave cómo obtener la extensión de archivo

Respuesta

30

Determinar la extensión de archivo (supongo que un nombre por cargador montado es 'archivo'):

file = my_model.file.url 
extension = my_model.file.file.extension.downcase 

luego preparar la mímica y la disposición de Vars:

disposition = 'attachment' 
mime = MIME::Types.type_for(file).first.content_type 

if %w{jpg png jpg gif bmp}.include?(extension) or extension == "pdf" 
    disposition = 'inline' 
end 

(agregar otras extensiones si lo desea) .

Y a continuación, enviar el archivo:

send_file file, :type => mime, :disposition => disposition 
+0

Muchas gracias, me gusta el estilo de su solución, y funcionó perfectamente. ¡¡De nuevo, gracias por responder!! – Wiggin

+0

donde exactamente en los archivos del proyecto de rieles coloca la disposicion y vars de tipo MIME? – maumercado

2

Una vez que ha cargado un archivo, el nombre se almacena en la base de datos. Esto también incluye la extensión. Asumiendo que tiene un modelo User con un cargador montado como asset, entonces se puede obtener como:

user.asset.file.extension 

En cuanto a enviarlo al usuario, si se llama a user.asset_url, se le dará la dirección URL donde está el archivo cargado El usuario puede usar ese enlace para obtener el archivo. ¿O estoy entendiendo mal lo que quiere decir con "enviar el archivo a un usuario"?

+0

gracias por responder !! bueno, quiero que el usuario descargue el archivo. Ya sabes, no descargues el cuadro de diálogo (abrir con ... o mantenerlo o en caso de mantener o rechazar chrome). Pensé que con un simple archivo de envío con parámetros estaría bien. – Wiggin

+0

Bueno, solo enlace al archivo a continuación. Puede obtener la url con 'user.asset_url'. –

+0

¡Sí, lo hice! Tu consejo funcionó perfectamente, ¡muchas gracias! – Wiggin

Cuestiones relacionadas