Manipulieren von ZIP Archiven am Server
Geschrieben von: Christian Koller 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 KomponenteDie 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 ArchivUm 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 WebserverDie 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-FlyDie 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 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ßbemerkungAuch 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. Verwandte Artikel
Web-basiertes Dateimanagement mit dem ASP FileMan Links zu anderen Sites
ActiveFile Komponente 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.
©2000-2006 AspHeute.com |