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

Manipulieren von ZIP Archiven am Server

Geschrieben von: Christian Koller
Kategorie: ASP Tricks

This printed page brought to you by AlphaSierraPapa

In einem meiner letzen Artikel habe ich mich mit dem Entzippen von ZIP Archiven auf dem Webserver beschäftigt. Dieser Artikel geht einen Schritt weiter und erklärt verschiedene Möglichkeiten im Zugriff und in der Manipulation von ZIP Archiven in ASP Seiten.

Ich habe für diesen Artikel die ActiveFile Komponente herangezogen, da sie keine Wünsche im Bereich der ZIP-Archive offen lässt.

Eine andere ASP Komponente, die sehr viele Möglichkeiten der Manipulation von ZIP Archiven aber auch von CAB Archiven bietet, ist die ActiveX Komponente SA-Archive der Firma Software Artisans, Inc.. Auch dieses Komponente ist als Evaluierungsversion gratis zum Download verfügbar. Der einzige Nachteil der SA-Archive Komponente in der aktuellen Version 1.0 ist, das beim Erstellen eines ZIP Archives die Pfadangaben der gezippten Dateien verloren gehen. Bei Verwendung der ActiveFile Komponente ist dies nicht der Fall.

Die ActiveFile Komponente

Die Installation und grundsätzliche Verwendung der ActiveFile Komponente habe ich bereits im Artikel Zippen und entzippen von Dateien beschrieben.

Daher möchte ich hier gleich Anwendungsbeispiele der ActiveFile Komponenten demonstrieren:

Extrahieren einer einzelnen Datei aus einem ZIP Archiv

Um eine einzelne Datei zu extrahieren, genügt der Aufruf der Extract Methode des ActiveFile.Archive Objektes:

Archive.Extract SourcePath, DestPath

Der SourcePath Parameter enthält den Namen (und den Relativpfad) der Datei oder der Dateien, die extrahiert werden sollen. Um mehrere Dateien zu extrahieren kann man Wildcards (*.*) benutzen. Der DestPath Parameter gibt das Verzeichnis an, in das die Dateien extrahiert werden.

Zur Veranschaulichung der Extract Methode hier ein vollständiges Beispiel.

<%
 Set Archive = Server.CreateObject("ActiveFile.Archive")
 ' Hier physikalischen Pfad zum ZIP Archiv angeben
 Archive.OpenArchive "C:\Test\Archiv.zip"
 ' Extrahiere Dateien in Verzeichnis C:\temp
 Archive.Extract "Artikel*.htm","C:\temp"
%>

Dieses Beispiel extrahiert alle Dateien des Archives deren Name mit "Artikel" beginnt, und die vom Typ HTM Datei sind. Die extrahierten Dateien werden in das Verzeichnis C:\temp geschrieben. Achtung: ActiveFile überschreibt bereits vorhandene Dateien des gleichen Namens in Zielverzeichnis (DestPath).

Erstellen eines neuen Archives am Webserver

Die ActiveFile Komponente kann auch Dateien packen und in ein ZIP Archiv schreiben. Dazu verwendet man die NewArchive, Add und SaveArchive Methoden des ActiveFile.Archive Objektes.

NewArchive erstellt ein neues ZIP Archiv und legt es auf der Festplatte des Webservers ab:

Archive.NewArchive Path, ArchiveType

Der Path Parameter gibt den physikalischen Pfad und den Namen des zu erstellenden ZIP Archives an (z.B. C:\Websites\AspExpert\Archives\test71.zip).

Der optionale ArchiveType Parameter gibt die Art des Archives an. Für gewöhnlich wird dieser Parameter nicht benötigt, da die ActiveFile Komponente den Archiv Typ gemäß der Dateiendung des Archives festlegt. So wird die Datei Test.zip automatisch als ZIP Archiv angelegt.

Neben ZIP Archiven beherrscht ActiveFile auch noch denm Umgang mit Stuffit, TAR, GNU und MacBinary BIN Dateien.

Mittels der Add Methode fügt man neue Dateien zum ZIP Archiv hinzu. Die Originaldateien bleiben dabei erhalten:

Archive.Add Path, Recurse, Flatten

Der Path Parameter gibt die Dateien oder Verzeichnisse an, die zum ZIP Archiv hinzugefügt werden sollen. Wildcards (* und ?) sind in dieser Angabe erlaubt.

Recurse ist ein optionaler Parameter, der bestimmt, ob die Unterverzeichnisse von Verzeichnissen samt Dateien auch in das Archiv geschrieben werden.

Der optionale Flatten Parameter gibt nur an, ob die Verzeichnisinformationen von hinzugefügten Dateien entfernt werden sollen oder nicht.

Nur das Hinzufügen einer Datei zu einem Archiv mittels Add Methode bewirkt noch nicht, daß die Datei auch im ZIP Archiv auf der Festplatte gespeichert wird. Dazu ist der Aufruf der SaveArchive Methode nötig:

Archive.SaveArchive Pfad

Der Pfad Parameter ist optional. Der Aufruf der SaveArchive Methode schreibt alle Änderungen des Archives in die Archiv Datei der Festplatte.

Hier nun das vollständige Beispiel, wie man mehrere Dateien am Webserver zu einem ZIP Archiv zusammenfasst, ohne dabei die Pfadinformationen der Dateien zu verlieren.

<% 
 Set Archive = Server.CreateObject("ActiveFile.Archive")
 Archive.NewArchive "C:\testzip\TestArchiv.zip"
 ' Archive.Add Path, Recurse, Flatten
 Archive.Add "C:\Data\Websites\AspHeute Online\*.*", True, False
 Archive.SaveArchive
%>

Das vorliegende Skript komprimiert alle Dateien des Verzeichnisses C:\Data\Websites\AspHeute Online\ und der darunter liegenden Verzeichnisse in das Archiv C:\testzip\TestArchiv.zip.

Da der Recurse Parameter auf True gesetzt ist, werden alle Dateien in sämtlichen Unterverzeichnissen erfasst. Der Flatten Parameter auf False gesetzt stellt sicher, daß zu allen Dateien im Archiv die relativen Pfadinformationen des Ursprünglichen Quellverzeichnisses gespeichert werden.

Zum Schluß dieses Artikels möchte ich noch die On-The-Fly Generierung eines ZIP Archives zeigen, das direkt zum Browser geschickt wird, ohne daß man dabei den Umweg über die Festplatte gehen muß:

Erstellen eines ZIP Archives On-The-Fly

Die vielfältigen Möglichkeiten der ActiveFile Komponente, die Fileupload und Filedownload umfassen, erlaubt die On-The-Fly Generierung von ZIP Archiven.

Der Begriff On-The-Fly steht hier für den Vorgang, daß ein ASP Skript ein ZIP Archiv erstellt und es dann direkt zum Browser sendet.

<%
' Temporaeres Verzeichnis fuer Operationen
 Set File = Server.CreateObject("ActiveFile.File")
 File.CreateTemp "C:\TEMP"

 ' Erstelle ZIP Archiv
 Set Archive = Server.CreateObject("ActiveFile.Archive")
 Archive.NewArchive File, 0

 ' Fuege Dateien zu ZIP Archiv
 Archive.Add "C:\testzip\dir\*.*", True, False

 ' Speichere das ZIP Archiv 
 Archive.SaveArchive
 ' Resourcen des Archiv Objektes freigeben
 Set Archive = Nothing

 ' Download und Loeschen der temporaeren Datei
 Response.AddHeader "Content-Disposition", "inline; filename=Archiv.zip"
 File.Download "application/x-zip-compressed", Now(), True, True
%>

Das Skript erstellt eine Temporäre Datei mittels File Objekt und CreateTemp Methode.

Das ZIP Archiv wird wie üblich mittels NewArchive Methode des Archive erzeugt. Die Add Methode fügt alle Dateien eines bestimmten Verzeichnisses zum ZIP Archiv hinzu. SaveArchive
schließlich speichert das temporäre ZIP Archiv im Verzeichnis C:\TEMP ab.

Der Download zum Client wird mit Setzen des HTTP Headers Content-Disposition eingeleitet. Dadurch teilt das ASP Skript dem Browser mit, daß die Datei, die er empfängt, den Namen Archiv.zip hat. Ältere Browser leiten aus der Dateiendung diese Namens auch den Typ des gesendeten Inhaltes ab.

Mit der Download Methode des File Objektes schickt dann das ASP Skript den Inhalte des ZIP Archives zum Browser. Die Syntax für die Download Methode ist übrigens wie folgt:

File.Download Mimetype, ModDate, ResponseEnd, DeleteFile

Sämtliche Parameter sind optional. Der Mimetype Parameter zeigt dem Browser den Typ des Inhaltes an, den er gesendet bekommt. ModDate schreibt eine Wert für das "Datum der letzen Änderung der Datei" zum Browser. ResponseEnd beendet automatisch das ASP Skript nach dem Aufrufen der Download Methode. Und DeleteFile auf True gesetzt sorgt dafür, daß die Datei (das ZIP Archiv) nach dem Download von der Festplatte gelöscht wird.

Schlußbemerkung

Auch das Manipulieren von ZIP Dateien am Server ist mit der ActiveFile Komponente sehr einfach und komfortabel zu erledigen. Das Erstellen von ZIP Archiven und Befüllen mit Dateien ist einfach über das Archive Objekt zu erledigen.

Darüberhinaus kann man ZIP Dateien sogar On-The-Fly generieren und zum Browser schicken. Dies ist speziell für den gesicherten Download sehr praktisch, da die ASP Seite die Sicherung mittels User Identifizierung (Einloggen oder Cookie) übernehmen kann, bevor das ZIP Archiv erstellt und zum Browser geschickt wird.

Ein weiteres interessantes Feature der ActiveFile Komponente (ab Version 2.2) ist die Möglichkeit, Dateien paßwortgeschützt in ZIP Archive zu komprimieren. Damit wird das Entpacken von Dateien verhindert wenn der Benutzer nicht das richtige Paßwort angibt.

This printed page brought to you by AlphaSierraPapa

Verwandte Artikel

Web-basiertes Dateimanagement mit dem ASP FileMan
http:/www.aspheute.com/artikel/20010507.htm
Zippen und entzippen von Dateien
http:/www.aspheute.com/artikel/20001005.htm

Links zu anderen Sites

ActiveFile Komponente
http://www.infomentum.com/activefile
Infomentum
http://www.infomentum.com

 

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