• Publicidad

Que una URL te dé como consecuencia un archivo ZIP

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

Que una URL te dé como consecuencia un archivo ZIP

Notapor piero66 » 2008-05-22 12:41 @570

Tengo un problema grande para mi, pero tal vez pequeño para Uds.

Necesito que una URL, me dé como consecuencia un archivo zip.

Es decir, si yo pongo esto: https://misition.com.mx/cgi-bin/programas.cgi?nombrezip=140_archivo.zip
me de como consecuencia un archivo zip.

Yo ya se la ubicación de ese archivo y ya lo tengo creado.

Le dejo el código que tengo, pero no me funciona, lo que me hace este código es abrirme en pantalla mi archivo zip y yo no quiero eso, quiero que te de la oportunidad, de abrir o guardar...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$archivo= "/home/ciudadano/web/documentos/$in{'nombrezip'}.zip";

    if (open(PIN, "<$archivo")) {
        print STDOUT "Content-Type:application/zip\n\n";
               my $buf;
               my $num_bytes = 0;
               binmode(PIN);
              binmode(STDOUT);
              while (read(PIN, $buf, 1024) > 0) {
                           print STDOUT $buf;
                          $num_bytes += length($buf);
                       }
             close(PIN);
           }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¡¡¡Espero me puedan ayudar, gracias!!!
piero66
Perlero nuevo
Perlero nuevo
 
Mensajes: 95
Registrado: 2008-05-22 12:00 @541

Publicidad

Notapor explorer » 2008-05-22 15:29 @686

Un ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

$nombre_fichero = 'ws.zip';

open    IMG, "<$nombre_fichero";
binmode IMG;
read    IMG, $fichero -s $nombre_fichero;
close   IMG;

print qq[Content-Type: application/zip\nContent-Disposition: attachment; filename="$nombre_fichero"\n\n];

binmode STDOUT;

print $fichero;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo que hacemos es leer el $nombre_fichero y lo guardamos en $fichero. Luego emitimos la cabecera, que incluye el propio nombre del archivo, con el que queremos que el usuario lo guarde (al menos, como sugerencia). Y finalmente, emitimos el $fichero.

Actualización: Cambiado el ejemplo y añadida la explicación.
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 piero66 » 2008-05-23 09:52 @452

El siguiente archivo me corrió de maravilla
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

$archivo= "/home/ciudadano/web/documentos/140_TRALUC1.zip";


if (open(PIN, "<$archivo")) {

    print "Content-Type: application/zip\nContent-Disposition: attachment; filename=140_TRALUC1.zip \n\n";

    my $buf;
    my $num_bytes = 0;
    binmode(PIN);
    binmode(STDOUT);
    while (read(PIN, $buf, 1024) > 0) {
        print STDOUT $buf;
        $num_bytes += length($buf);
    }
    close(PIN);
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El problema que ahora tengo es que necesito implementar ese script para que el archivo sea variable, si envío parámetros, o sea, de esta manera:

https://servidor/cgi-bin/prgmas/admin/envio.cgi?zip=nombrearchivo

me lo respete... yo sé que el código de arriba necesito modificarlo y cuando lo modifico... en vez de darme como consecuencia un archivo, me abre el archivo... pero, lógico: como son imágenes, me pone pura basura en pantalla... no sé si debo cambiar algo en esta línea:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "Content-Type: application/zip\nContent-Disposition: attachment; filename=140_TRALUC1.zip \n\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¡No sé si me expliqué!!. U otra:

No sé si yo pueda enviar parámetros y que de alguna manera pueda utilizar este mismo código, pero solo poniendo una línea donde recibiré el nombre del archivo como parámetro...

Gracias.
piero66
Perlero nuevo
Perlero nuevo
 
Mensajes: 95
Registrado: 2008-05-22 12:00 @541

Notapor explorer » 2008-05-23 10:17 @470

Con el módulo CGI, es muy sencillo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use CGI ':standard';

if ( param('zip') ) {

    $nombre_del_fichero = param('zip');

    if ( -e $nombre_del_fichero ) {

        open    IMG, "<$nombre_del_fichero";
        binmode IMG;
        read    IMG, $imagen, -s $nombre_del_fichero;
        close   IMG;

        print header(
            -type       => 'application/zip',
            -attachment => $nombre_del_fichero,
        );
        binmode STDOUT;
        print $imagen;
    }
    else {
        print header, start_html('Error'),p('Error: no se encontró fichero'), end_html;
    }
}
else {
    print header, start_html('Error'),p('Error: no se indicó fichero'), end_html;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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 piero66 » 2008-05-23 11:09 @506

Muchas gracias... ya me creó el archivo.
Ya lo único que necesito hacer es que el archivo tome el nombre del parámetro enviado. ¡¡¡ Gracias !!!
piero66
Perlero nuevo
Perlero nuevo
 
Mensajes: 95
Registrado: 2008-05-22 12:00 @541

Notapor kidd » 2008-05-23 16:42 @737

Simplemente añade el parámetro de filename en la cabeza del HTTP que te dio explorer:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
        print header(
            -type       => 'application/zip',
            -attachment => $nombre_del_fichero,
            -filename   => $nombre_del_fichero
        );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México


Volver a Intermedio

¿Quién está conectado?

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