Kategorien:
Suchbegriffe:
Suchfelder:
Suche starten
Neue Beiträge / Top 7
Alle Artikel / Liste
Bücher zu ASP/ASP.Net
Startseite / Hilfe
Fragen zu ASP/ASP.NET
Datenschutzrichtlinen
Impressum / Kontakt
Das ASP.Net Codebook. Die unentbehrliche Referenz für alle ASP.Net-Entwickler [Autoren: Stefan Falz, Karsten Samaschke]
Active Server Pages-FAQ
Active Server Pages - FAQ (v. 1.50) © 2000 - 2020 by Stefan Falz Webconsulting

GetFile! Dynamischer Dateiupload im Browser

Dateizugriff Zurück Druckversion Stefan Falz 31.05.2001
Frage: Wie kann ich eine Datei (doc, pdf, gif, mdb, ...) zum Download anbieten ("Speichern unter ...")?
Sicherlich haben Sie auch schon vor dem Problem gestanden, dass Sie Ihren Usern gerne
ein Word- oder PDF-Dokument zum Download anbieten möchten, der Browser aber diese
Datei direkt öffnet und dem User den "Speichern unter ..."-Dialog gar nicht erst anbietet.

Dies beruht auf der Tatsache, dass moderne Browser in der Lage sind, die zu den Dateitypen
zugehörigen Programme (z.B: Microsoft Word, Adobe Arcobat Reader, ...) zu öffnen und die
entsprechende Datei direkt an das Programm zu übergeben.

Um immer den "Speichern unter ..."-Dialog zu erzwingen, müssen Sie die Datei mit ASP auslesen
und die Daten selbst zum Browser senden. Dies lässt sich aber eigentlich ganz einfach machen:

Im nachfolgenden Beispiel möchten wir dem Browser ein Word-Dokument senden, dass im Ordner
"<aktuellerpfad>/dokumente/" liegt und "test.doc" benannt wurde.

[sendfile.asp]
<%
Response.Buffer = TRUE
Response.Clear
Response.Expires = 0
Response.ContentType = "application/msword"

strFileName = "test.doc"
strMyPath   = Server.MapPath("./dokumente/") & "\" & strFileName

Response.AddHeader "Content-Disposition","attachment;filename=" & strFileName

Set objFileSys = Server.CreateObject("Scripting.Filesystemobject")

    ' --- Ermitteln der Dateigroesse
    Set objFile = objFileSys.GetFile(strMyPath)
        FileSize = objFile.Size
    Set objFile = Nothing

    ' --- Öffnen der Datei
    Set objFile = objFileSys.OpenTextFile(strMyPath, 1, false, -1)

        ' --- Auslesen des Dateinhalts und Ausgabe
        ' --- per Response.BinaryWrite
        Response.BinaryWrite(objFile.Read(FileSize))

        ' --- Sollte es Probleme beim Download geben (ab und zu
        ' --- kommt es vor, dass Zip-Archive nicht richtig geöffnet
        ' --- werden können, benutzen Sie die nachfolgende Anweisung
        ' --- Damit wird ein abschliessendes Zeichen mitgesendet, dass
        ' --- dieses Problem behebt.
        ' --- Response.BinaryWrite(objFile.Read(FileSize) & ChrB(0))

    Set objFile = Nothing

Set objFileSys = Nothing

Response.Flush
%>



Mit verschiedenen Browsern gibt es aber auch hier evtl. Probleme in der Art, dass der
Dateiinhalt trotzdem im Browser angezeigt wird, da die Implementierung des Headers
Content-Disposition fehlerhaft ist. Siehe folgende Microsoft Knowledge-Base Artikel:
http://support.microsoft.com/support/kb/articles/Q279/6/67.ASP ff. (IE 5.x) und
http://support.microsoft.com/support/kb/articles/Q182/3/15.ASP (IE 4.x).
Netscape hat mit verschiedenen Versionen aber ebenfalls Probleme mit diesem Header,
so dass man eigentlich keine allgemeingültige Lösung anbieten kann. Verschiedene
Workarounds werden aber in den nächsten Tagen hier angeboten werden.


Sehr gut
1 2 3 4 5 6
Ungenügend
Zurück | Bisherige Aufrufe: 36188 | Bisherige Bewertungen: 94 | Durchschnitt: 1,93
Stefan Falz Webconsulting