Kategorie: Dateizugriff
Frage: Wie kann ich Dateien durch ASP zum Client senden, obwohl kein direkter Zugriff möglich ist?
Anmerkung: Dieses Beispiel ergänzt den Artikel 98 (Wie kann ich Bilder dynamisch durch
ASP an den Browser senden?). Da das FSO aber nur begrenzt für den Einsatz mit Binär-
dateien geeignet ist, haben wir ein zusätzliches Beispiel geschrieben, dass allerdings
MDAC 2.5 oder höher voraussetzt. Das hier verwendete Objekt ADODB.Stream ist erst
seit MDAC 2.5 integriert. Sie können sich ein Update unter http://www.microsoft.com/data/
herunterladen.

Auch dieses Beispiel setzt auf dem Problem auf, dass Sie Ihren Usern gerne Dateien bereitstellen
möchten, den direkten Weg über den URL der Grafik aber unterbinden möchten. Dies kann zum
Beispiel der Fall sein, wenn Sie ein geschütztes Grafikarchiv anbieten und die Downloads selbst
kontrollieren möchten. (Sie können das Beispiel natürlich auch für alle anderen Dateiarten verwenden)

Im nachfolgenden Beispiel senden wir dem Browser eine GIF-Datei, die im Ordner
"<aktuellerpfad>/images/" liegt und "test.gif" benannt wurde.

[stream.asp]
<%
Response.Buffer = TRUE
Response.Clear
Response.Expires = 0
Response.ContentType = "image/gif"

' ---  benötigte Konstanten des Streamobjekts einbinden
Const adTypeBinary = 1
Const adTypeText = 2

strFileName = "test.gif"
strMyPath   = Server.MapPath("./images/") & "\" & strFileName

' --- Wenn Sie die Datei nicht im Browser anzeigen lassen wollen,
' --- sondern diese lediglich zum Download anbieten möchten,
' --- können Sie dies durch die Angabe des nachfolgenden Headers
' --- erreichen. Entfernen Sie einfach das Kommentarzeichen in der
' --- folgenden Zeile
' --- Response.AddHeader "Content-Disposition","attachment;filename=" & strFileName

' --- Erzeugen des Streamobjekts
Set objStream = Server.CreateObject("ADODB.Stream")

    ' --- Setzen des Typs auf Binary. Dies ist wichtig, da
    ' --- ansonsten die Daten nicht richtig gespeichert werden.

    objStream.Type = adTypeBinary
    objStream.Open

    ' --- Auslesen des Dateinhalts. Hier wird ein absoluter Pfad verlangt.
    objStream.LoadFromFile(strMyPath)

    ' --- Ausgabe per Response.BinaryWrite
    Response.BinaryWrite objStream.Read(objStream.Size)
    
    ' --- Schliessen des Stream-Objekts
    objStream.Close
    
Set objStream = Nothing

Response.Flush
%>

Diese ASP-Datei können Sie entweder direkt als Ziel-URL im Browser (also als normalen Link)
oder auch als Referenz eines IMG-Tags (z.B.: <img src="stream.asp?IMG=1">) angeben.

Beispiel bei Einbindung der ASP-Seite als Referenz des IMG-Tags:


Hier können Sie die Beispieldatei http://www.aspfaq.de/ex_scripts/stream.asp direkt aufrufen.
Das Beispiel referenziert die Grafik http://www.aspfaq.de/ex_scripts/images/aspfaq_button.gif

Hier ist das gleiche Skript, dass die Datei aber zum Download anbietet:
http://www.aspfaq.de/ex_scripts/stream_d.asp.


Die Datei kann aber aufgrund der Servereinstellungen nicht direkt abgerufen werden.
Die ASP-Datei kann den Inhalt der Datei aber trotzdem an den Browser senden, da diese
die Datei über das Stream Objekt ausliest.

Copyright 2000 - 2021 by Stefan Falz Webconsulting