Rieles que usan send_file para enviar varios archivos

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

  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

Cualquier ayuda es apreciada!

preguntado el 08 de noviembre de 11 a las 16:11

2 Respuestas

send_file le dice al controlador que debe responder a la solicitud del navegador enviando un archivo. - A diferencia de renderizar 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 estoy omitiendo las respuestas HTTP de varias partes que generalmente no son compatibles en este momento).

Ya que solo puedes enviar un archivo, ¡haz que cuente! El archivo puede ser un zip de varios archivos, pero luego el usuario deberá descomprimirlos.

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

Como ejemplo, UX (Experiencia de usuario): Envíe un correo electrónico a sí mismo con varios archivos adjuntos. Luego use GMail y vea cómo presentan los múltiples archivos para que los descargue.

contestado el 24 de mayo de 12 a las 04:05

HTTP ha tenido respuestas de varias partes, por lo que, si bien una sola solicitud se cumple con una sola respuesta, no es necesariamente un solo documento el que se devuelve. La compatibilidad del navegador con mensajes de varias partes es bastante mala, desafortunadamente, pero es incorrecto implicar que esto es una limitación de HTTP. - coreyward

@coreyward - buen punto sobre la especificación del protocolo. Actualicé la respuesta. - Larry K

@LarryK, ¿cómo mostrarías múltiples enlaces de descarga en la página web usando send_file? Recibo un DoubleRenderError cuando lo intento. - Joel

Tendría múltiples enlaces en su página. Cada enlace es para una descarga diferente. El primer enlace descargará el archivo a, el segundo es para el archivo b. Cada respuesta a un enlace usa send_file para devolver 2 archivo. - Larry K

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

respondido 08 nov., 11:20

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

@JoelL Eso es lo que digo en la respuesta; puede empaquetarlos y enviarlos juntos. - Dave Newton

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.