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

ASP-basierte resumable Downloads

Geschrieben von: Christoph Wille
Kategorie: ASP Tricks

This printed page brought to you by AlphaSierraPapa

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.

This printed page brought to you by AlphaSierraPapa

Download des Codes

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

Verwandte Artikel

Dateien zum Client schicken
http:/www.aspheute.com/artikel/20010223.htm

Links zu anderen Sites

GetRight Download Manager
http://www.getright.com/
IIS 4.0 Supports HTTP 1.1 File Download Resume Capability
http://support.microsoft.com/support/kb/articles/Q229/7/04.ASP
SoftArtisans FileUp
http://www.softartisans.com/softartisans/saf.html

 

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