Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Dateien zum Client schicken

Geschrieben von: Christian Holm
Kategorie: ASP Grundlagen

This printed page brought to you by AlphaSierraPapa

Sie möchten dem Client eine Datei via ASP zum Browser schicken - ohne Redirect? Das ist ja prinzipiell nicht schwer. Dieser Artikel zeigt Ihnen anhand von Beispielen wie man einfach Text/HTML Dateien mit dem FileSystemObject zum Client schicken kann, und was passiert, wenn man das gleiche mit Dateien in binärer Form z.B. gezippten Dateien probiert.

Je nach Ihren Ansprüchen biete ich Ihnen zwei unterschiedliche Lösungswege an. Die eine angebotene Möglichkeit ist straight ASP und ist nur für plain Text bzw. HTML Dateien geeignet. Die andere behilft sich mit der FileCache 2.1 Komponente von AlphaSierraPapa.com. Neben der Möglichkeit Dateien beliebigen Typs zu versenden bietet sie den zusätzlichen Bonus, daß Sie die uneingeschränkte Version der Komponente kostenlos downloaden können.

Je nachdem wie Sie sich entscheiden, bietet wie gesagt dieser Artikel für beide Mögllichkeiten je ein Beispiel. Beginnen wir mit dem straight ASP Ansatz für Text/HTML Dateien.

Textdateien senden

Für das erste Beispiel habe ich eine plain-Text bzw. eine Html Datei ausgewählt, die dem Client gesendet werden soll. Dies erledigen wir wie eingangs erwähnt mit dem FileSystemObject. Dabei wollen wir prüfen ob die Datei richtig beim Client ankommt.

Die OpenTextFile Methode übersetzt nämlich den Inhalt in einen je nach Einstellung einen anderen Zeichencode Aber sehen wir uns dazu erst einmal den Sourcecode an, und zwar für eine plain-Text Datei an (RetrieveTXT.asp).

Zuerst die Vorgabe des ContentTypes. In diesem Fall - da wir eine Textdatei schicken wollen - verwenden wir

Response.ContentType = "text/plain"

Jetzt müssen wir aber die Datei angeben, die ja zum Browser des Clients geschickt werden soll. Die benötigten Informationen über die zu übermittelnde Datei selbst weisen wir Variablen zu (um spätere Änderungen zu erleichtern):

strFile = "TestTXT.txt"
strPath = "F:\Inetpub\wwwroot\TestRoot\"
strResource = strPath & strFile

Nun sind wir soweit, daß wir die Datei übermitteln können. Hierbei müssen wir mit dem FileSystemObject hantieren. Diesem übergeben wir den Pfad und den Dateinamen.

Set oFso = Server.CreateObject("Scripting.FileSystemObject")
Set oByteSize = oFso.GetFile(strResource)

Um performant zu bleiben ermitteln wir die Größe der vorher angegebenen Datei. Dies erledigen wir mit der Size Property (Eigenschaft). Diese gibt, verwendet im Zusammenhang mit einer Datei - hier als Alias das oByteSize Objekt - die Bytegröße der Datei zurück. Da wir die Bytegröße in einer Variablen abspeichern, benötigen wir das oByteSize Objekt nicht mehr und können es mit Nothing zerstören.

bByteSize= oByteSize.Size
Set oByteSize = Nothing
...

Als nächstes lesen wir den Inhalt der Datei mit der OpenTextFile Methode des FileSystem Objektes ein. Diese Methode nimmt als Parameter den vollständigen Pfad samt Dateinamen (gespeichert in der Variable strResource), sowie den IO-Modus (hier lesen), die Option zur Erstellung einer Datei (hier false) und das Format in dem die Datei gespeichert wurde (hier Unicode).

Set oStream = oFso.OpenTextFile(strResource, 1, false, -1)
bBinContent = oStream.Read(bByteSize)
Set oStream = Nothing

Schließlich können wir die Datei zum Browser schicken. Dies erledigen wir wie gewohnt in solchen Fällen mit der BinaryWrite Methode:

Response.BinaryWrite(bBinContent)

Da der Sourcecode nun fertig ist, können wir die ASP Datei RetrieveTXT.asp auf einem Web Server ausführen. Das Ergebnis präsentiert sich wie erhofft:

Für HTML Dateien gilt ähnliches; hier setzen wir den ContentType aber auf:

Response.ContentType = "text/html"

Ausgeführt in einem Browser sieht das dann wie folgt aus:

Dieser "Trick" des Auslesens von HTML Dateien kann dann nützlich werden, wenn man in ASP mit vorgefertigten Templates arbeitet, die an den Client geschickt werden sollen.

Nun das gleiche Spiel mit einer Zip-Datei was uns aber auch nach der Umstellung des ContentTypes folgende Fehlermeldung beschert:

Die Begründung liegt darin, daß die binäre Zip-Datei etliche Sonderzeichen der Art "´.“½½y.»ÐF=7.Ô¿®rIÍeÔÉ=ùË÷" beinhaltet. Diese werden nach der Formatumwandlung falsch interpretiert. Daher sollte man sich nach einer Alternative umsehen.

Die FileCache Komponente

Wenn Sie das Spiel mit mehreren Dateien durchführen wollen, auf die Codeschreiberei verzichten wollen oder aus anderen Gründen lieber eine Komponete verwenden wollen, bietet sich nichts einfacheres als der Einsatz der kostenlosen FileCache 2.1 Komponente an.

Komplizierte Installation, mühseliges Einbinden in ASP Code bzw. die Notwendigkeit dicke Handbücher zu lesen - mitnichten! Die Integration ist ganz einfach, und das demonstiert das nächste Sourcecode Beispiel (RetrieveZip.asp):

Set objFileCache = Server.CreateObject("Softwing.FileCache.1")

bOutput = objFileCache.InitFromFile("2001023.zip", False)
objFileCache.MimeType = "application/x-zip-compressed"

bOutput = objFileCache.Write()

Das interne Prozedere übernimmt die Komponente. Einfach die benötigten Dateiinformationen und den gewünschten MIME-Type angeben - in diesem Fall wieder application/x-zip-compressed - damit wir den Speichern als Dialog erhalten.

Nach der Ausführung auf einem Web Server gibt die ASP Datei RetrieveZip.asp einen Speichern als Dialog aus und wir können die Datei lokal speichern. Danach kann man das ZIP in einem Dekomprimierungsprogramm ohne Probleme öffnen.

Schlußbemerkung

Dieser Artikel zeigte, daß bei der Verwendung der OpenTextFile Methode bei einfachen Text enthaltenden Dateien alles nach Plan läuft, aber binäre Dateien hingegen unbrauchbar werden. Man kann sich aber z.B. mit Komponenten wie der kostenlos downloadbaren FileCache 2.1 Abhilfe verschaffen.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010223.zip

Verwandte Artikel

ASP-basierte resumable Downloads
http:/www.aspheute.com/artikel/20010425.htm
Ein Excel-Sheet am Server generieren und zum Client schicken
http:/www.aspheute.com/artikel/20010305.htm

Links zu anderen Sites

FileCache 2.1
http://www.alphasierrapapa.com/IisDev/Components/FileCache/

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.