• Publicidad

Descarga múltiple de ficheros

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Descarga múltiple de ficheros

Notapor adrolmar » 2009-09-29 10:37 @484

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.003 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
adrolmar
 

Publicidad

Re: Descarga múltiple de ficheros

Notapor explorer » 2009-09-29 10:55 @496

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Descarga múltiple de ficheros

Notapor salva » 2009-09-29 16:18 @721

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.
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680

Re: Descarga múltiple de ficheros

Notapor adrolmar » 2009-09-30 08:57 @414

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.001 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.
adrolmar
 

Re: Descarga múltiple de ficheros

Notapor explorer » 2009-10-01 03:30 @187

¿No es

Content-Length

en lugar de

Content_length

?

(hay dos diferencias)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Descarga múltiple de ficheros

Notapor adrolmar » 2009-10-01 06:52 @327

¡PERFECTO! ¡¡UN 10!!
jeje, eso era lo que causaba todo el follón con los ficheritos...
Ando muy despistado, disculpasss

¡Gracias otra vez!
adrolmar
 


Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados