• Publicidad

Descargar archivo

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Descargar archivo

Notapor AgeValed » 2008-10-10 09:04 @419

Buenas, mi consulta es la siguiente: tengo un sub que genera un archivo xls (el archivo pm, tiene varias sub).

Quería saber la forma de que el archivo en cuestión se pueda descargar desde una página, ¿alguna forma? Y si es posible que no quede guardado, si es posible que cuando se apriete ese botón se genere, se descargue ¡y no quede en el servidor!

Cualquier datos que necesiten avisen...

Saludos... ¡y mil gracias por todo!

PD: librería que estoy utilizando: Spreadsheet::WriteExcel

¡Miniejemplo por si necesitan!

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    use Spreadsheet::WriteExcel;

    sub makeExcelFile {

    # Create a new Excel workbook
    my $workbook = Spreadsheet::WriteExcel->new('perl.xls');

    # Add a worksheet
    $worksheet = $workbook->add_worksheet();

    #  Add and define a format
    $format = $workbook->add_format(); # Add a format
    $format->set_bold();

    # Write a formatted and unformatted string, row and column notation.
    $worksheet->write(1,1,'Open',$format);
    $worksheet->write(1,2,'Send',$format);
    $worksheet->write(1,3,'Subjet',$format);
    $worksheet->write(1,4,'Percent',$format);
    my $rowaux =2;
    while ($rowaux <=10 ) {
        $worksheet->write($rowaux,1,'a');
        $worksheet->write($rowaux,2,'b');
        $worksheet->write($rowaux,3,'c');
        $worksheet->write($rowaux,4,'d');
        print $rowaux;
        $rowaux ++;
    }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¡¡EDITO!!

Algo así me vendría bárbaro:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. [%#Create a button to Export the result to an XLS file#%] 
  2. <form method="post" action="export_excel.cgi"> 
  3. [% FOREACH id = buglist %] 
  4. <input type="hidden" name="id" value="[% id FILTER html %]"> 
  5. [% END %] 
  6. <input type="hidden" name="format" value="xls"> 
  7. <input type="submit" value="Export XLS"> 
  8. </form> 


Fragmento extraído de http://monocaffe.blogspot.com/2007/08/r ... zilla.html , unque no entendí cómo hacerlo... :(


¡ACLARACIóN!

El archivo está en la carpeta /tmp/, o sea, no puedo poner un <a> en el código con la dirección del archivo, es lo único que me hace falta; el archivo se genera, se guarda en /tmp/ y necesito de alguna forma se ponga en la web un botón o link, ¡lo que sea para descargarlo!
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Publicidad

Notapor explorer » 2008-10-10 18:21 @806

La parte HTML tiene un formulario, donde el usuario lanza el CGI. Y el cgi debe enviar un 'Content-type' para que el cliente web del usuario sepa que tiene que almacenar ese fichero y no intentar abrirlo.

En el programa cgi.pl de la carpeta examples del módulo Spreadsheet::WriteExcel tienes un ejemplo perfecto.
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 AgeValed » 2008-10-14 07:45 @364

Ajá, sí es útil eso pero en mi caso no me sirve, dado que en el código tiene parte que manda a la web y parte que guarda en archivo. La página lo que debería hacer es mostrar una tabla y que la tabla tenga un botón que al pulsar el botón descargue el .xls generado que está guardado en la carpeta /tmp del servidor.

Con lo que me pasaste (ya había visto algo parecido) me carga el cuadro y casi todo el código de la web...

Saludos, y si no se puede, veré otra forma de hacerlo...
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Notapor explorer » 2008-10-14 08:00 @375

No. El código de cgi.pl genera un Excel, de forma directa, hacia el navegador del usuario. No genera ninguna parte web ni guarda a archivo.

Otra cosa es lo que dices, lo de mostrar una tabla. La tabla la puedes hacer en HTML, y al pulsar el botón, ejecutar el cgi.

El cgi lo que puede hacer es localizar el fichero a enviar en /tmp, mandar las cabeceras como lo hace cgi.pl, y a continuación, abrir el fichero e ir mandando hacia la salida estándar. Ni siquiera es necesario usar ningún módulo Spreadsheet::*. Solo abrir, leer y cerrar un fichero Excel. Con open(), read(), print() y close() sería suficiente.
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 Básico

¿Quién está conectado?

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