![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Newbie
![]() Registriert seit: 05.11.2001
Alter: 65
Beiträge: 4
|
![]() 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!! |
![]() |
![]() |
![]() |
#2 |
Hero
![]() |
![]() 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.
____________________________________
Bibel |
![]() |
![]() |
![]() |
#3 |
Newbie
![]() Registriert seit: 05.11.2001
Alter: 65
Beiträge: 4
|
![]() 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 |
![]() |
![]() |
![]() |
#4 |
Hero
![]() |
![]() 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.
____________________________________
Bibel |
![]() |
![]() |
![]() |
#5 |
Inventar
![]() Registriert seit: 24.09.2001
Beiträge: 7.335
|
![]() "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.
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org . |
![]() |
![]() |
![]() |
#6 | |
verXENt
![]() |
![]() Zitat:
Probiere einmal: Code:
print "Content-disposition: filename=$attch"; |
|
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|