Página 1 de 1

Descarga múltiple de ficheros

NotaPublicado: 2009-09-29 10:37 @484
por adrolmar
Hola, ¡buenas!

El caso es que necesito poder descargar ficheros de un servidor. Con un solo fichero me funciona con

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(AUDIO, "$aux[$msgs[0]]") or die ("error al abrir: $!");
  2. $size = -s $aux[$msgs[0]];
  3. $|=1;
  4. print header(-type=>$formats{$format}->{'mime'}, -Content_length => $size, -attachment => "$aux[$msgs[0]]");
  5.                                
  6. while(($amt = sysread(AUDIO, $data, 4096)) > 0) {
  7.         syswrite(STDOUT, $data, $amt);
  8. }
  9. close(AUDIO);
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Esto me abre un diálogo del navegador pidiéndome si reproducirlo o guardarlo, pero necesito precisamente que en caso de tener varios ficheros seleccionados, esa elección se aplique a todos ellos (y no ir uno a uno preguntando).

Por no ser 'práctico' para el usuario (que probablemente desconoce qué es un fichero comprimido) he descartado la idea de hacer un fichero comprimido y descargar ése.

¿Alguna sugerencia?
Gracias

Re: Descarga múltiple de ficheros

NotaPublicado: 2009-09-29 10:55 @496
por explorer
Por definición del funcionamiento del HTTP, no es posible: cada fichero que se envía es una petición del cliente. Ahora bien, con HTTP Push sí que se puede enviar un flujo (stream).

Yo usaría Apache::MP3 o cualquiera de los módulos o programas que realizan stream de audio.

Re: Descarga múltiple de ficheros

NotaPublicado: 2009-09-29 16:18 @721
por salva
Por no ser 'práctico' para el usuario (que probablemente desconoce qué es un fichero comprimido) he descartado la idea de hacer un fichero comprimido y descargar ése.

Si en la respuesta incluyes el tipo MIME adecuado (por ejemplo, application/zip para los .zip), el navegador ofrecerá la posibilidad de abrirlo ya con la aplicación que corresponda.

Re: Descarga múltiple de ficheros

NotaPublicado: 2009-09-30 08:57 @414
por adrolmar
Si en la respuesta incluyes el tipo MIME adecuado (por ejemplo, application/zip para los .zip), el navegador ofrecerá la posibilidad de abrirlo ya con la aplicación que corresponda.

Tienes razón, incluso creo que sin especificarlo Window$ ya sabe cómo tratarlo (creo que incorpora un gestor de archivos comprimidos zip cutrecillo por defecto).

El problema que estoy teniendo ahora es que, después de hacer una descarga (correctamente) intento pulsar otro botón para refrescar o guardar otro fichero y el cgi no funciona. El navegador me devuelve la página pero en código HTML en lugar de interpretarla. Supongo que hago algo mal en el tratamiento del fichero a descargar y se queda como esperando algo o incluso no termina de copiarlo correctamente aunque el fichero local, aparentemente, se haya transferido bien.

Aquí pego el código a ver si veis algo raro.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub guardar_conv(){
  2.        
  3.         my (@msgs) = @_;
  4.        
  5.         # cargamos todas los ficheros
  6.         my @aux = <$ruta/*.mp3>;
  7.                
  8.         if (open(AUDIO, "$aux[$msgs[0]]")) {
  9.                 $size = -s $aux[$msgs[0]];
  10.                 $|=1;
  11.                 print header(-type=>'audio/mpeg3', -Content_length => $size, -attachment => "$aux[$msgs[0]]");
  12.                
  13.                 while(($amt = sysread(AUDIO, $data, 4096)) > 0) {
  14.                         syswrite(STDOUT, $data, $amt);
  15.                 }
  16.                 close(AUDIO);
  17.                                
  18.         } else {
  19.                 die("¡Error al abrir fichero: $!!");
  20.         }
  21. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿¿alguien sabe por qué si comprimo usando ZIP en Linux, al descargarlo en Window$ me da mensaje de error como que no es capaz de tratarlo como un archivo ZIP?? necesitaría un formato de compresión estándar pero el zip debería ser compatible con todos los sistemas.. he usado opciones para comprimirlo en binario, o cambiar los finales de linea al formato MSDOS, pero no lo consigo.

Gracias de nuevo.

Re: Descarga múltiple de ficheros

NotaPublicado: 2009-10-01 03:30 @187
por explorer
¿No es

Content-Length

en lugar de

Content_length

?

(hay dos diferencias)

Re: Descarga múltiple de ficheros

NotaPublicado: 2009-10-01 06:52 @327
por adrolmar
¡PERFECTO! ¡¡UN 10!!
jeje, eso era lo que causaba todo el follón con los ficheritos...
Ando muy despistado, disculpasss

¡Gracias otra vez!