Alexander Foken: Download erzwingen?

Beitrag lesen

Hallo an alle!
das Problem ist allseits bekannt. bei Klick auf einen HREf eines *.doc, *.pdf etc. -Dokuments, öffnet sich bei entsprechendem Plug-In die dazugehörige Anwendung. Ich will Dateien aber explizit zum Download anbieten - und ohne dem Hinweis "Rechter Mausklick...".
Es gibt die Möglichkeit, einen anderen Dateityp anzugeben.
... href="dummy.pdf" type="application/octet-stream"...
Funktioniert aber nicht bei IE, der liest tatsächlich die Dateiendung aus.
Fragen:

  1. Kann man mit JavaScript das Öffnen des "Speichern unter..."-Dialogs erzwingen (so wie print() das Drucken-Dialogfenster aufruft)?
  2. Wenn nein, gibt es andere Möglichkeit (ich arbeite mit JSP)?

Moin Moin !

In meinem Projekt (CGI-basiert) mache ich das so:

if (user_wants_to_download()) {
        print "Content-type: application/x-save-this-file\r\n\r\n";
    } else {
        print "Content-type: ",real_mime_type_of_the_file(),"\r\n\r\n";
    }
    print content_of_the_file();

application/x-save-this-file ist:
* binärsicher ( --> application)
* nicht registriert ( --> x- = experimentell)
* gibt dem lesefähigen User einen Hinweis (--> "save-this-file")
* ansonsten völlig willkürlich gewählt, um mit keinem anderen MIME-Typen zu kollidieren

user_wants_to_download() kann z.B. einfach abfragen, ob in der URL ein Parameter "download" vorkommt (?download=0|1).

real_mime_type_of_this_file() liefert den "passenden" MIME-Type, also z.B. application/pdf.

content_of_the_file() liefert die eigentliche Datei.

Mein CGI benutzt diesen selbst erfundenen MIME-Typ konsequent, so daß User ihren Browser so einstellen können, daß Dateien mit diesem MIME-Typ automatisch gespeichert werden; der Browser fragt nur nach dem Dateinamen.

Du kannst sogar (außer beim IIS) den Dateinamen vorgeben, indem Du den Link passend machst:

http://meinserver/cgi-bin/meincgi.cgi/der-vorgegebene-dateiname.pdf?download=1;bla=fasel;laber=rhababer;

Der IIS sucht dann leider die Datei der-vorgegebene-dateiname.pdf im Verzeichnis(!!!) /cgi-bin/meincgi.cgi/. Kein anderer Webserver ist so "blöd", wenn es um das Zerlegen einer URL geht!

Wie schon andere hier bemerkten, benimmt sich der IE in Sachen MIME-Typen etwas daneben, eine URL, die auf .txt endet, wird IMMER als Text heruntergeladen und angezeigt, auch wenn der MIME-Typ z.B. image/jpeg ist.

Seltsam, daß immer die Microsoft-Produkte Probleme mit offenen Standards haben.

Alexander