Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Descargar archivos (no mostrarlos) desde el explorador

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Dom Ago 17, 2008 11:56 pm
digitallxd
Perlero Nuevo
Perlero Nuevo
Registrado: 12 Jul 2007
Mensajes: 17
Descargar archivos (no mostrarlos) desde el explorador Responder citando

Buenas.

Tengo un problema a la hora de hacer un link a un archivo de texto, y ésta es que cuando pongo <a href="fichero.." > ...., al clickar en el link, se me abre desde el explorador. Lo que yo necesito es que me salga un dialogo de descarga con el archivo a descargar, sencillamente eso, pero no sé bien bien qué debo poner, si es un tipo de link especial o un script que escriba algo especial tipo Content-type ...


Muchas gracias de antemano
Mensaje Lun Ago 18, 2008 4:02 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
Responder citando

Si el navegador lo abre, es porque por la extensión y tipo MIME del fichero, el navegador ya es capaz de mostrarlo.

Los navegadores siempre intentan mostrar los ficheros que son capaces de reconocer. Por eso existe la opción, en el menú contextual del ratón, de grabar el enlace como un fichero, en lugar de descargarlo por el navegador.

Los archivos de texto sí que los puede mostrar fácilmente el navegador, por lo que siempre intentará mostrarlos.

Ahora bien, hay un truco...

Hay que conseguir que el navegador no descargue directamente el fichero, sino que se baje un fichero intermedio. Ese fichero intermedio le indicará las cabeceras correctas del fichero que realmente queremos que se baje. Entre esas cabeceras incluiremos una de ellas que obligue a sacar la caja de diálogo de Guardar/Salvar.

He encontrado un ejemplo hecho para PHP (en inglés), pero es muy fácil de pasar para Perl.

El truco consiste en mandar el mismo Content-Type del fichero, pero añadiremos un Content-Disposition: attachment. Luego, abrimos el fichero y se lo enviamos al cliente como un torrente de bytes.
Mensaje Lun Ago 18, 2008 5:04 am
digitallxd
Perlero Nuevo
Perlero Nuevo
Registrado: 12 Jul 2007
Mensajes: 17
Responder citando

¡Muchas gracias, explorer!

sip, la cosa va por ahí.

Os muestro lo que yo he encontrado en forma de script completo:

Perl:
#!/usr/bin/perl
use CGI;
use warnings;
use CGI qw(param);
my $file=param('file');

print "Content-Type:application/octet-stream; name=\"$file\"\r\n";
print "Content-Disposition: attachment; filename=\"$file\"\r\n\n";

my $aux;

open( FILE, "<ruta_del_fichero/$file");
while($aux=<FILE>)
{
   print("$aux");
}

Así de simple, simplemente en este script lo llamamos download.pl?file=fichero y lo descargará sin problemas.

Más información aquí:

http://www.tutorialspoint.com/perl/perl_cgi.htm

donde pone How To Raise a "File Download" Dialog Box ?

De nuevo, ¡muchas gracias por tu ayuda!
Mensaje Lun Ago 18, 2008 5:43 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
Responder citando

Deberías hacer una prueba, cambiando el octet-stream por el tipo mime del fichero. Así, el usuario tiene más información del tipo de fichero que está recibiendo.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group