WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Perl-Downloadscript (http://www.wcm.at/forum/showthread.php?t=96091)

werner2k 06.05.2003 03:59

Perl-Downloadscript
 
Für eine Webanwendung habe ich eine Kette von Perl-Scripts geschrieben, unter anderm den folgenden Code für das Download von Dateien:

use strict;
use common;
use Mail::POP3Client;
use MIME::Parser;
use configwm;
use CGI;
use nswmauth;

#obtain the FORM information that has been passed by using
#the param() method of the cgi object.
my $query=new CGI;
my $nswmc=new common;
my $nswmau = new nswmauth;
my $loginname = $query->param("loginname");
my $pkey = $query->cookie(-name=>'PKEY');
my $password = $query->param("password"); # encrypted password !!!
my $POPserver = $query->param("POPserver");
my $msgid = $query->param("id");
my $cache = $query->param("cache");

my $browser = $ENV{'HTTP_USER_AGENT'};

$|=1;

# authenticate for download
if ($nswmau->isAuthOK($loginname,$nswmc->decryptit($password,$query->cookie("PKEY")),$POPserver)==0) {
print "</HEAD><BODY>";
print "<font size=+1>$POPserver: $loginname, $conf::incorrectlogin";
exit;
}
my $attch = $query->param("file");
my $mimetype=$nswmc->mimetype($attch);

# do the download
print "Content-type: $mimetype\n\n";
print "Content-disposition: attachment; filename=$attch";
print "\r\n" if (!$conf::modperl);
open(ATTCH, "<$conf::temppath/$attch");
binmode ATTCH;
while(<ATTCH>) {
print $_;
}
close(ATTCH);

exit;

Er funktioniert recht gut - nur erscheint im "Save-as"-Fenster des Browsers (egal ob Opera oder IE) als Dateiname immer der Name des aufgerufenen CGI-Files (gespeichert wird allerdings die korrekte Datei).
Weiss jemand Rat??
Danke im Voraus!!

Flink 06.05.2003 12:45

Ich gehe davon aus, dass im HTML-Code des Clients für den Parameter 'file' ein Wert eingetragen wird. Für den <A>Anchor</A> müsstest du jetzt bereits auf Client-Seite den Namen des 'file' einsetzen. Ich weiss ja nicht, wie deine HTML-Seite für den Client aussieht, z.B.ob da ein Button gedrückt werden muss.

werner2k 06.05.2003 15:03

Clientseitiger Auslöser des Scripts
 
Den clientseitigen Auslöser habe ich glatt vergessen zu posten - so ab 4:00 werden die Gedanken flach ....

Das cgi-script wird über einen Link aufgerufen, der folgendermasen aussieht:

Filename

Flink 07.05.2003 10:19

Der Browser nimmt immer die Informationen aus dem <a href="file.xyz"> .
D.h. du müsstest bereits diese Client-HTML-Seite über ein Perl-Skript erzeugt haben, damit der FILE-Name dort steht!
Zerlege also dein CGI-Skript in 2 Teile bzw. gib eine HTML-Seite an, wo der FILE-Name im Anchor vorkommt. Eine andere Variante wäre, mit JavaScript ein entsprechendes Fenster zu öffnen, in welchem ein verwendbarer Anchor mit FILE-Name ausgegeben wird.

_m3 07.05.2003 17:35

"Content-Disposition is not part of the HTTP standard ..."
http://www.w3.org/Protocols/rfc2616/...5.html#sec15.5

Daher wundert es mich nicht, dass es nicht klappt.

Philipp 07.05.2003 18:38

Re: Perl-Downloadscript
 
Zitat:

Original geschrieben von werner2k
Er funktioniert recht gut - nur erscheint im "Save-as"-Fenster des Browsers (egal ob Opera oder IE) als Dateiname immer der Name des aufgerufenen CGI-Files (gespeichert wird allerdings die korrekte Datei).
Dieses Problem hatte ich schon mal, allerdings unter PHP.

Probiere einmal:
Code:

print "Content-disposition: filename=$attch";
Zumindest IE hat machmal Probleme wenn "attachment" in der Content-disposition Zeile steht.


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag