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

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Dateien zum Client schicken

Geschrieben von: Christian Holm
Kategorie: ASP Grundlagen

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.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

ASP-basierte resumable Downloads
Ein Excel-Sheet am Server generieren und zum Client schicken

Links zu anderen Sites

FileCache 2.1

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

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