# Zip-Files in JS/Ajax/JQuery



## Skid (12. November 2009)

Hallo zusammen,

ich stehe vor einem etwas komplizierten Problem.
Und zwar müsste ich via JS Zip-Dateien öffnen können, bzw. Zugriff auf die Dateien innerhalb der ZIP bekommen können.

Leider lese ich im Internet überall, dass es hierbei keine Möglichkeiten gibt, jedenfalls was JS angeht. Habe ich hierbei mir Ajax oder JQuery eine Chance ?
Bzw. gibt es auch Mittel und Wege für JS selbst ?

In Java und PHP wäre dies möglich, jedoch weiss ich nicht inwieweit ich das in JS einbetten kann.

Hat jemand einen Vorschlag ?

Grüße,
SkiD.

P.s. andere Archivtypen oder das schicken der Dateien innerhalb des ZIP-Archivs stehen hierbei nicht zur Option.


----------



## Thomas Darimont (12. November 2009)

Hallo,

eine Möglichkeit wäre beispielsweise ein kleines Java Applet, welches die Zip Operation durchführt. Über JavaScript kann mit dem Applet kommuniziert werden.

http://java.sun.com/docs/books/tutorial/deployment/applet/invokingJavaScriptFromApplet.html
http://java.sun.com/docs/books/tutorial/deployment/applet/invokingAppletMethodsFromJavaScript.html

...oder per:
http://java.sun.com/javase/6/docs/api/java/applet/AppletContext.html
getAppletContext().showDocument("javascript:someFunction()");

Gruß Tom


----------



## Skid (12. November 2009)

Hallo,

danke für die Referenzen und die schnelle Antwort!
Ich schaue mir die Seiten mal an und melde mich dann wieder.

Das ist soetwas, wo man leider vergeblich mit Google sucht, wenn man nicht weiss, wonach man genau sucht ;-)

Grüße,
SkiD.


----------



## Skid (13. November 2009)

Thomas Darimont hat gesagt.:


> http://java.sun.com/docs/books/tutorial/deployment/applet/invokingAppletMethodsFromJavaScript.html



Ich habe mir den Link mal genauer angesehen und versucht nachzuvollziehen, jedoch habe ich zwei Fragen dazu:

Ausschnitt aus dem Script:

```
<script src="http://www.java.com/js/deployJava.js"></script>
<script> 
    <!-- applet id can be used to get a reference to the applet object -->
    var attributes = { id:'mathApplet', code:'jstojava.MathApplet',  width:1, height:1} ; 
    var parameters = {jnlp_href: 'math-applet.jnlp'} ; 
    deployJava.runApplet(attributes, parameters, '1.6'); 
</script>
```

1.) Muss ich wirklich auf externen Skript von der Java-Homepage zugreifen ?
2.) Wie erzeugt man diese 'math-applet.jnlp' ?

Grüße,
SkiD.


----------



## Thomas Darimont (15. November 2009)

Hallo,



> Und zwar müsste ich via JS Zip-Dateien öffnen können, bzw. Zugriff auf die Dateien innerhalb der ZIP bekommen können.



Wo bekommst du denn die Zip Datei her? Liegt die auf dem Server, oder liegt die auf dem Client Rechner? Wie gibst du den Pfad zu der Datei an? Als URL / Pfad und oder via input type="file" ? Was musst du mit der Zip Datei genau machen? Willst du nur den Dateiinhalt auflisten, oder auch Dateiinhalte extrahieren und per JS verarbeiten?

Interessieren dich innerhalb des Zips nur Text oder auch Binär Dateien?



> 1.) Muss ich wirklich auf externen Skript von der Java-Homepage zugreifen ?
> 2.) Wie erzeugt man diese 'math-applet.jnlp' ?


...brauchst du nicht....

Je nachdem was du machen musst brauchst du nur ein Applet, welches die Zip Verarbeitung durchführt. Das steuerst du dann von außen via Java Script...

Um Dateioperationen auf dem Client Rechner ausführen zu können muss das Applet signiert sein. Wie das geht findet man hier: 
http://www.tutorials.de/forum/java/232026-textdateien-mit-applet-auslesen.html

Wie man mit dem JavaApplet von Javascript aus interagiert findet man hier:
http://www.google.de/search?hl=de&q=call+java+applet+from+javascript&btnG=Suche&meta=&aq=f&oq=

Gruß Tom


----------



## Skid (15. November 2009)

Hallöchen,



Thomas Darimont hat gesagt.:


> Wo bekommst du denn die Zip Datei her? Liegt die auf dem Server, oder liegt die auf dem Client Rechner? Wie gibst du den Pfad zu der Datei an? Als URL / Pfad und oder via input type="file" ? Was musst du mit der Zip Datei genau machen? Willst du nur den Dateiinhalt auflisten, oder auch Dateiinhalte extrahieren und per JS verarbeiten?



Also die ZIP-Datei, bzw. der Pfad zu dieser, wird per URL übergeben (&zip=http://www.server.de), die Datei liegt hierbei auf einen anderen Server.
Von dort muss ich mir die ZIP-Datei 'besorgen'.

In der ZIP-Datei (eigentlich eine Art Contaner) liegen 2 oder mehrere Dateien.
Die erste ist eine XML-File, welche Informationen (Position, Artikel-Nr. etc.) über die anderen Dateien enthält.
Die anderen Datein sind O3D-Dateien (wenn dir das was sagt), welche eigentlich ein 3D-Objekt enthalten, die ich dann auch einlesen muss.

Ich muss dem Inhalt also extrahieren, es sei denn, es gibt eine Möglichkeit, die O3D-Files zu "buffern", was wahrscheinlich ein einfacher Weg wäre um diese Dateien in eine Szene zu laden.

Die Verarbeitung der Dateien, findet somit per JS statt.



Thomas Darimont hat gesagt.:


> Interessieren dich innerhalb des Zips nur Text oder auch Binär Dateien?



Der Text der XML interessiert mich, da dieser gleichzeitig Informationen und den Pfad der Datei, innerhalb der ZIP, angibt.

Die Binär-Daten wären in diesem Fall die O3D-Files, welche von meinem Programm verarbeitet werden und anschließend in die Szene geladen werden müssen.

Die zwei Links werde ich morgen früh austesten, ich habe so schon einiges ausprobiert, was Java <-> JS angeht, aber bisher keinen Erfolg gehabt da die Kommunikation zwischen Programmiersprache und Scriptsprache nicht richtig funktioniert.
D.h. Von Java kommt irgendwie nicht wirklich etwas in JS an.

Grüße,
SkiD.


----------



## Skid (16. November 2009)

Soweit funktioniert der Zugriff und die Kommunikation zw. Java uns JS!
Trotz Signatur bekomme ich jedoch diesen Fehler, wenn ich versuche die Datei irgendwo zu entpacken:


```
uncaught exception: Error calling method on NPObject! [plugin exception: java.security.AccessControlException: access denied (java.io.FilePermission c:\Tmp read)].
```

Die Signatur habe ich durchgeführt wie in deinem Link beschrieben, mir wir das Fenster, beim Laden der Seite, auch angezeigt.

Grüße,
SkiD.


----------

