[bcn-pm] download archivo en cgi

carlos escribano ces at buki.dyndns.org
Sun Jun 29 09:32:53 CDT 2003


Help, please,...!

Quiero que un script retorne un archivo. Estoy atascado y no se ver qué hago 
mal; En los numerosos resultados de Google no encuentro sustanciales 
difrencias con este código, y he probado cambiar bastantes pequeñas cosas.

La parte conflictiva del script es:

open DOWNLOAD, $dir . '/' . $filename . '.tar.gz';
binmode(DOWNLOAD);
binmode STDOUT;
select STDOUT; $|=1;
                                                                                                                                            
my @info = stat(DOWNLOAD);
my $length = $info[7];
my $blksize = $info[11] || 16384;
                                                                                                                                            
print "Content-type: application/x-zip-compressed\n";
print "Content-Disposition: attachment; filename=\"". $filename . 
".tar.gz\"\n";
print "Content-Length:$length\n\n";
                                                                                                                                            
my $buffer;
while (!eof(DOWNLOAD)) {
    read(DOWNLOAD, $buffer, $blksize);
    print $buffer;
}
close(DOWNLOAD);

La primera es que mozilla se empeña en escribir un archivo tipo MIME 
text/x-perl, con el nombre del script que llama, y no el archivo y tipo 
correspondientes.

La segunda es que el browser (probado con mozilla y lynx) se empeña en recibir 
el archivo incluida la cabecera. Si el original tar.gz tenía 673 bytes, según 
indica precisamente la cabecera (Content-Length:673) lo guardado en el disco 
contiene 793 bytes, y con un editor hexadecimal se puede comprobar que 
efectivamente los bytes sobrantes son precisamente la cabecera HTTP, que se 
añade al principio del archivo.

¿Alguien tiene alguna idea de dónde está mal el código || falta algo ?

Gracias

Carlos
 




More information about the Barcelona-pm mailing list