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.01.2002
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.

Sehr gut
1 2 3 4 5 6
Ungenügend
Zurück | Bisherige Aufrufe: 26155 | Bisherige Bewertungen: 38 | Durchschnitt: 1,47
Stefan Falz Webconsulting