2011-11-08 13 views
5

Actualmente estoy tratando de enviar varios archivos fuera de mi aplicación usando el método Rails send_file. Recorre todos los archivos, pero solo envía el último en el directorio. Aquí está mi código.Rieles usando send_file para enviar archivos múltiples

Dir.foreach(@dir) do |entry| 
    if entry != "." && entry != ".." && entry != ".DS_Store" && entry != ".title" 
     send_file(@dir + entry, :disposition => 'inline') 
     logger.info("File: " + @dir + entry) 
    end 
    end 

¡Se agradece cualquier ayuda!

Respuesta

1

Solo puede enviar un solo archivo en una sola solicitud; si desea enviar varios archivos, necesita cerrarlos o agruparlos.

+0

¿Podría elaborar un poco más? Si me gustaría enviar varios archivos al navegador con send_data. ¿Cómo voy a hacer eso? ¿Los comprimiría individualmente y pasaría el archivo comprimido a send_data? Gracias de antemano – Joel

+0

@ JoelL Eso es lo que digo en la respuesta; puedes agruparlos y enviarlos juntos. –

4

send_file le dice al controlador que debe responder a la solicitud del navegador enviando un archivo. - En lugar de representar una vista, enviar JSON, etc.

En el uso común, envía exactamente una respuesta en HTTP. (Estoy omitiendo la discusión de encuestas largas y otros tipos de respuestas esotéricas. También omito las respuestas HTTP de varias partes que generalmente no son compatibles en este momento).

Como solo puede enviar un archivo, haga que cuente ! El archivo puede ser un zip de varios archivos, pero luego el usuario deberá descomprimirlos.

Una alternativa es mostrar varios enlaces de descarga en la página web, invitando al usuario a descargar uno tras otro para realizar las descargas múltiples.

Como ejemplo UX (Experiencia del usuario): envíe un correo electrónico a usted mismo con varios archivos adjuntos. Luego use GMail y vea cómo presentan los múltiples archivos para descargar.

+1

HTTP ha tenido respuestas de varias partes, por lo que si bien una única solicitud se cumple con una sola respuesta, no es necesariamente un único documento el que se devuelve. Lamentablemente, el soporte del navegador para mensajes multiparte es bastante malo, pero es incorrecto implicar que esto es una limitación de HTTP. – coreyward

+0

@coreyward - buen punto acerca de la especificación del protocolo. He actualizado la respuesta. –

+0

@LarryK ¿cómo mostrarías múltiples enlaces de descarga en la página web usando send_file. Obtengo un DoubleRenderError cuando intento eso. – Joel

Cuestiones relacionadas