• Publicidad

Descargar archivos (no mostrarlos) desde el explorador

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Descargar archivos (no mostrarlos) desde el explorador

Notapor digitallxd » 2008-08-18 00:56 @081

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
digitallxd
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2007-07-12 06:40 @319

Publicidad

Notapor explorer » 2008-08-18 05:02 @251

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

Notapor digitallxd » 2008-08-18 06:04 @294

¡Muchas gracias, explorer!

sip, la cosa va por ahí.

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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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");
}
 
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

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!
digitallxd
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2007-07-12 06:40 @319

Notapor explorer » 2008-08-18 06:43 @321

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.


Editado: faltan las líneas binmode(), tanto para FILE como para STDOUT;
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado