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

Zippen und entzippen von Dateien

Geschrieben von: Christian Koller
Kategorie: ASP Tricks

Das Übertragen von großen Datenmengen im Internet ist oftmals eine Frage der Geduld - oder der Planung. Hat man zum Beispiel jeden Tag eine komplette Website auf den Webserver zu kopieren, so ist dies spätestens bei 1 MB und 100 Dateien ein langwieriges Unterfangen.

Genauso lang dauert es im Allgemeinen, um vom Webserver große Datenmengen, wie zum Beispiel eine Access Datenbank (*.mdb Datei) zur Sicherung vom Webserver zu laden.

Um nun die Datenmenge und die Ladezeit zu minimieren, kann man Tools zum Komprimieren von Dateien, wie Winzip, verwenden.

Winzip ist das wohl verbreitetste Komprimierungsprogramm unter Windows. Die mit Winzip erzeugten Archive haben überlicherweise die Dateiendung ZIP. Solch ein ZIP-Archiv kann eine Datei, mehrere Dateien sowie ganze Verzeichnisse samt Unterverzeichnissen enthalten. Das Archiv selbst ist etwa 10% - 95% kleiner als die ürsprünglichen Dateien.

Arbeitet man mit einem FTP (File Transfer Protocol) Programm um Zugriff auf die Dateien eines Webservers zu erlangen, so ist das Laden oder Senden einer ZIP-Datei schneller als wenn man die unkomprimierten Daten transferiert. Nicht nur, daß eine geringere Datenmenge schneller übertragen wird, auch das Übertragen von einer Datei (dem ZIP-Archiv) anstatt von mehreren Dateien erlaubt eine Steigerung der durchschnittlichen Übertragungsrate.

Das folgende Diagramm (Bild 1) zeigt, wie der Prozess des Übertragens von komprimierten Daten zum Webserver vor sich geht: Beliebig viele Dateien werden in ein ZIP-Archiv (im Diagramm Transfer.zip) gepackt. Dabei vermindert sich die Gesamtgröße der Datenmenge vor allem bei Textdateien (wie .htm, .asp) erheblich. Das Archiv wird dann mittels FTP auf den Webserver transferiert, und die darin enthaltenen Dateien werden dann wieder entpackt und auf den Webserver geschrieben.


Bild 1: Senden von gepackten Dateien an den Webserver

Komprimieren von Dateien und Verzeichnissen

Der erste Teil des Prozesses ist einfach: Sie benutzen WinZip und komprimieren ein Verzeichnis mit allen darin enthaltenen Dateien und Unterverzeichnissen und speichern das Archiv unter Transfer.zip (oder einem anderen Namen) in einem beliebigen Verzeichnis auf Ihrem Computer ab.

Tip: Wenn Winzip auf Ihrem Computer installiert ist, so klicken Sie mit der rechten Maustaste auf das zu komprimierende Verzeichnis oder eine einzelne Datei und wählen "Zu ZIP Archiv hinzufügen" (Siehe Bild 2). Das ZIP-Archive wird im selben Verzeichnis erstellt, das auch das zu komprimierende Verzeichnis enthält.


Bild 2: Komprimieren eines Verzeichnisses

Öffnen Sie das ZIP-Archiv mit einem Doppelklick, so sehen Sie die darin gespeicherten Dateien, deren Komprimierung und den ursprünglichen, relativen Pfad der Datei (Bild 3).


Bild 3: Inhalt des ZIP-Archives

Dieses Archiv können Sie mit jedem beliebigen FTP-Pragramm (z.b. WS_FTP LE) zum Webserver transferieren.

Jetzt kommt die eigentliche Hürde des Prozesses: Wie entpackt man das Archiv wieder am Webserver? Wenn Sie direkten Zugriff auf den Server haben, so können Sie das Archiv wieder mit Winzip entpacken. Wenn Sie allerdings nur über FTP und ASP auf Ihren Server zugreifen können, wie dies oft bei gemieteten Webserver-Accounts der Fall ist, so müssen Sie zu anderen Mitteln greifen.

Entpacken des ZIP-Archives am Webserver

Um ein ZIP-Archiv am Webserver zu entpacken und die Dateien in der gespeicherten Verzeichnisstruktur auf den Webserver zu schreiben, empfiehlt sich der Einsatz einer ASP Komponente.

Ich habe für diesen Artikel (exemplarisch für andere Komponenten), die ActiveFile Komponente der Firma Infomentum gewählt, da diese mit ZIP Dateien am Server umgehen kann und von ASP aus problemlos einsetzbar ist.

Installation der ActiveFile Komponente am Webserver

Bevor die ActiveFile Komponente am Webserver benutzt werden kann, muß sie am Webserver installiert werden. Dies erlaubt für gewöhnlich jeder ernstzunehmende ASP Provider. Wenn Sie ActiveFile selber am Webserver installieren wollen, so müssen Sie dazu nur die Datei ActiveFile22.exe (bei ActiveFile Version 2.2.7) vom Hersteller laden und mit einem Doppelklick auf die Datei die Installation starten.

Während der Installation können Sie eventuell eine kompakte Installation ("Compact" bei Setup Type) wählen, um nur die zum Betrieb notwendigen Dateien, aber keine Dokumentation und Beispiele zu installieren. Installieren Sie die ActiveFile Komponente auf einem beliebigen virtuellen Server, so ist sie normalerweise von den ASP Dateien in allen virtuellen Servern desselben Computers aus verwendbar.

Verwendung der ActiveFile Komponente

Die ActiveFile Komponente ist eine ActiveX Komponente und kann daher von jeder ASP Datei am Webserver benutzt werden.

Dabei verfügt die ActiveFile Komponente über eine Vielzahl von Objekten zum Manipulieren von Dateien, Verzeichnissen und ZIP-Archiven.

Hier ein einfaches ASP Skript (ExtractZIP.asp), das ein beliebiges ZIP-Archiv, das am Webserver liegt, entpackt und die darin enthaltenen Dateien auf den Webserver schreibt. Die Datei ExtractZIP.asp ist im Download zu diesem Artikel enthalten. Die ASP-Fehlerbehandlung mittels On Error Resume Next, die Fehler auffängt wenn zum Beispiel auf ein nicht existierendes Archiv zugegriffen werden soll, sind im nachfolgenden Listing der Überischt halber weggelassen.

<%
 If Request.ServerVariables("CONTENT_LENGTH") <> 0 Then
    isPostBack = True
    ZipDatei = Trim(Request.Form("ZipDatei"))
    Verzeichnis = Trim(Request.Form("Verzeichnis"))
    
    PhysVerzeichnis = Server.MapPath(Verzeichnis)
    PhysZipDatei = Server.MapPath(ZipDatei)
 
    Response.Write("Entpacke Datei<br>" & ZipDatei & _
    " (" & PhysZipDatei & ")<br>in Verzeichnis<br>" & _
    Verzeichnis & " (" & PhysVerzeichnis & ").<br><br>")
    
    ' Instanziere das Archive Objekt
     Set Archive = Server.CreateObject("ActiveFile.Archive")
    
    ' Schreibe alle Dateien auf den Webserver
    ' ACHTUNG: Ueberschreibt alle Dateien ohne Vorwarnung!
    Archive.Extract "*.*", PhysVerzeichnis
    
	Set Archive = Nothing   
 Else
    isPostBack = False
 End If
%>

<% If  isPostBack = False Then %>

 <form action="<%= Request.ServerVariables("SCRIPT_NAME") %>" 
    method="POST">
 ZipDatei am Server: 
   <input type="Text" name="ZipDatei" 
   value="/Verzeichnis/Datei.zip"> <br>
 Entpacken in Verzeichnis: 
   <input type="Text" name="Verzeichnis" value="/Verzeichnis">
 <br>

 <input type="Submit" name="Submit" value="Entpacken">
 </form>

<% End If %>

Dieses ASP Skript präsentiert ein Webformular, in dem Sie angeben können, wo sich die zu entpackenden ZIP-Dateien befinden, und in welches Verzeichnis die Dateien und Verzeichnisse des ZIP-Archives geschrieben werden sollen. Das Programm verlangt relative Pfadangaben (relativ zum Hauptverzeichnis des Webservers), die mittels Server.MapPath in absolute Pfade umgerechnet werden.

Damit das Skript ausführbar ist, muß der IUSR_Machine Account des Windows NT 4.0 oder Windows 2000 Webservers ausreichende Schreibrechte für die Verzeichnisse und Dateien der Website haben. Die Gründe dafür finden Sie in unserem Artikel Schreiben einer Textdatei auf den Server unter der Überschrift "Probleme mit der Zugriffserlaubnis".

Nachdem der Benutzer das Formular abgeschickt hat, werden die Werte der Formularfelder in den Variablen ZipDatei und Verzeichnis gespeichert.

Aus den relativen Pfaden werden mittels Server.MapPath die absoluten Pfade für die ZIP-Datei und das Verzeichnis ermittelt und in den Variablen PhysVerzeichnis und PhysZipDatei gespeichert.

Sodann wird eine Instanz des ActiveFile.Archive Objektes mittels CreateObject instanziert und in der Variablen Archive gespeichert. Über diese Variable kann man nun alle Aktionen setzen, die das ActiveFile.Archive Objekt zur Verfügung stellt.

Das Entpacken der ZIP-Datei selbst geht durch Aufruf der Extract Methode des ActiveFile.Archive Objektes vonstatten:

Archive.Extract "*.*", PhysVerzeichnis

Der Parameter "*.*" bedeutet, daß alle Dateien des ZIP-Archives entpackt und auf den Webserver geschrieben werden. Der Parameter PhysVerzeichnis gibt das Verzeichnis (als physikalischen Pfad) an, in das die Dateien und Verzeichnisse des ZIP-Archives geschrieben werden.

Nachdem das ZIP-Archiv extrahiert ist, können Sie die ZIP-Datei auf dem Webserver (zum Beispiel mittels FTP Programm) löschen, damit kein unnötiger Speicherplatz verbraucht wird.

Wie man nun den umgekehrten Weg geht und Dateien am Webserver, wie zum Beispiel voluminöse Access Datenbanken (*.mdb Dateien) zu komprimieren, um das Laden der Datei vom Webserver zu beschleunigen, möchte ich in einem meiner nächsten Artikel zeigen.

Schlußbemerkung

Dateien von und zum Webserver zu transferieren ist eine zeitaufwendige Aufgabe. Um speziell den Umgang mit einer großen Anzahl von Textdateien zu erleichtern, empfiehlt es sich, die Dateien zu komprimieren und in ein ZIP-Archiv zu verpacken, dieses Archiv zum Server zu transferieren, und es dort wieder zu entpacken. Die Verzeichnisstruktur aller Dateien, Verzeichnisse und Unterverzeichnisse bleibt bei diesem Vorgang erhalten.

Wenn man keinen direkten Zugriff auf den Webserver hat, so kann man sich selbst mittles ASP und einer ActiveX Komponente wie ActiveFile ein Skript schreiben, daß das Entpacken der ZIP-Datei und das Schreiben des komprimierten Inhaltes auf den Webserver erlaubt.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Eine simple UNZIP-Komponente programmieren
Kopieren verboten - Lizenzsicherung bei ASP Scripts
Manipulieren von ZIP Archiven am Server
Schreiben einer Textdatei auf den Server
Web-basiertes Dateimanagement mit dem ASP FileMan

Links zu anderen Sites

ActiveFile Komponente
HOWTO: Troubleshoot IUSR_machine Permissions Problem
Winzip

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.