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

ASP-basierte resumable Downloads

Geschrieben von: Christoph Wille
Kategorie: ASP Tricks

Ein Feature des Internet Information Servers, das irgendwie eine "vergessene Perle" zu sein scheint ist das der resumable Downloads - einen Download an der Stelle weiterzumachen, an der er zuletzt abgebrochen hat/wurde. Zwar gilt dieses IIS Feature nur für statische Dateien, allerdings kann man auch ASP resumable Downloads beibringen.

Als erstes möchte ich die Frage klären, wofür ein resumable Download für eine ASP Datei eigentlich von Vorteil sein soll. Ein guter Grund sind geschützte Downloadbereiche, in denen ASP Dateien den eigentlichen "Download" mittels zB. Response.BinaryWrite durchführen. Werden die zum Download angebotenen Dateien groß, wird ein Abbruch beim Download immer lästiger - erstens belastet er den Server, zweitens die Nerven des Users - weil er wieder beim Anfang des Downloads beginnen muß.

Heute zeige ich einen Ansatz, der schnell verwirklicht werden kann, und zwar wie immer durch die Verwendung einer Komponente: SA FileUp. Der Vorteil, der eine Pay-Komponente rechtfertigt? Eine einzige Zeile Code ist nur notwendig, um resumable Downloads zu implementieren.

Ein Resumable Download Beispiel

Klarerweise konnte es kein einfaches Wald-und-Wiesen Beispiel sein, das ich mir aussuchte. Nein, ich wollte ein Multi-Megabyte Videofile transferieren, bei dem der Vorteil eines resumable Downloads sofort sichtbar wird. Weiters wollte ich eindeutig beweisen, daß keine Caching-Magie irgendwo ihre Hände im Spiel hat, daher habe ich das Caching nach üblicher Vorgehensweise ausgeschaltet.

Vorwegschicken möchte ich noch den Grund, warum man Response.Buffer auf False setzen muß: da ich die Bandbreite des Downloads begrenze (am Ende von download.asp), wird nur eine bestimmte KB Menge pro Sekunde geschickt - und wenn Buffering eingeschaltet ist, wird zuerst alles am Webserver gecacht und dann erst geschickt - der ganze Effekt der Bandbreitenbegrenzung ist damit dahin.

<%
' WICHTIG: IIS5 enabled Buffering per default
Response.Buffer = False

' Zum Beweis, daß wirklich mit Range Retrieval 
' Requests gearbeitet wird, Caching ausschalten
Response.Expires = 0
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-control", "no-store"


Set dLoad = Server.CreateObject("SoftArtisans.FileUp")

' (a) um es am internen Netz testen zu können
' (b) um einen Server mit Bandbreite per User gleich auszulasten
dLoad.PerConnectionBandwidthLimit = 100

Response.ContentType = "application/octetstream"
Response.AddHeader "Content-Disposition", "inline; filename=video.wmv"
dLoad.TransferFile Server.MapPath("video.wmv")
%>

Wirklich notwendig wäre nur Server.CreateObject und TransferFile - der Rest ist nur "Beiwerk" (aber ein nützliches, wie ich bemerken möchte).

Der Test mit GetRight

Klarerweise wollen wir das Feature des resumable Downloads auch testen. Eine Variante dazu ist zum Beispiel der Download Manager GetRight, der resumable Downloads perfekt unterstützt. Nach erfolgter Installation das Programm einfach starten, und unter File/Enter New Url den zu downloadenden URL eingeben. Wenn man GetRight mit Browserintegration installiert, bräuchte man nur im Internet Explorer auf den Link klicken - aber ich bin einfach etwas zu mißtrauisch gegenüber Automatismen.

Durch einen Klick auf OK wird der Download auch schon gestartet. Man sieht, daß das Downloadlimit von ca 100KB in der Sekunde eingehalten wird. Und man kann sich auch "spielen", indem man auf Pause und dann Resume klickt:

Es funktioniert! (wie nicht anders zu erwarten) Die Downloads werden korrekt resumed, auch wenn wir den Webserver mit iisreset.exe neu starten - die Range Retrieval Requests aus HTTP/1.1 machen es möglich.

Schlußbemerkung

Das heute gezeigte "isolierte" Beispiel kann man auch in gesicherten Bereichen verwenden, da GetRight und andere Downloadmanager das Übernehmen von Cookies aus dem IE gestatten, und sich somit korrekt beim Webserver als der entsprechende User anmelden können.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Dateien zum Client schicken

Links zu anderen Sites

GetRight Download Manager
IIS 4.0 Supports HTTP 1.1 File Download Resume Capability
SoftArtisans FileUp

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.