Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » Descarga múltiple de ficheros  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 6 mensajes ] 
 
Nota 2009-09-29 10:37 @484
Avatar de Usuario
Perlero Nuevo
Registrado: 2009-08-04 13:53 @620
Ubicación: Valencia, España
Mensajes: 46
Descarga múltiple de ficheros
Hola, ¡buenas!

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

Syntax: [ Download ] [ Hide ]
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);


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

_________________
"Dios nos dió boca para pedir y el kernel de Linux para conceder/denegar servicios" (popular)


Nota 2009-09-29 10:55 @496
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Descarga múltiple de ficheros
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


Nota 2009-09-29 16:18 @721
Avatar de Usuario
Perlero Frecuente
Registrado: 2008-01-03 15:19 @680
Mensajes: 175
Re: Descarga múltiple de ficheros
Citar:
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.


Nota 2009-09-30 08:57 @414
Avatar de Usuario
Perlero Nuevo
Registrado: 2009-08-04 13:53 @620
Ubicación: Valencia, España
Mensajes: 46
Re: Descarga múltiple de ficheros
Citar:
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.
Syntax: [ Download ] [ Hide ]
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. }


¿¿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.

_________________
"Dios nos dió boca para pedir y el kernel de Linux para conceder/denegar servicios" (popular)


Nota 2009-10-01 03:30 @187
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Descarga múltiple de ficheros  RESUELTO
¿No es

Content-Length

en lugar de

Content_length

?

(hay dos diferencias)

_________________
JF^D Perl programming


Nota 2009-10-01 06:52 @327
Avatar de Usuario
Perlero Nuevo
Registrado: 2009-08-04 13:53 @620
Ubicación: Valencia, España
Mensajes: 46
Re: Descarga múltiple de ficheros
¡PERFECTO! ¡¡UN 10!!
jeje, eso era lo que causaba todo el follón con los ficheritos...
Ando muy despistado, disculpasss

¡Gracias otra vez!

_________________
"Dios nos dió boca para pedir y el kernel de Linux para conceder/denegar servicios" (popular)


Responder al tema  [ 6 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO