# FileUpload/Download Files im Webroot werden gelöscht



## qwertz (21. Nov 2006)

Hallo zusammen,

Für ein Project an meiner Hochschule muss ich einen FileUpload- und Download über einen webbrowser realisieren.
Für den file upload und download habe ich jeweils ein Servlet geschrieben.

Mein Problem ist folgendes. Wenn ich in Netbeans mein Project deploye werden alle Daten im Webroot gelöscht und neu geschrieben. Das heißt die files die ich hochgeladen habe sind dann weg.
Wenn ich die files in ein anderes Verzeichnis als das Webroot speichere kann ich nicht darauf zugreifen.

Mir fallen jetzt zwei Lösungen für das Problem ein.

1. Die Daten als BLOB in die Datenbankschreiben -> soll ich aber nicht
2. Die Daten sichern und immer wieder neu ins Webroot schreiben --> halte ich aber nicht für eine gute Lösung.

Wenn mir jemand sagen kann wie ich auf eine anderes Verzeichnis zugreifen kann wäre super.

Ach ja ich benutze Netbeans 5.0 gebundelt mit appserver 8.2


Danke


----------



## SlaterB (21. Nov 2006)

ja wie bestimmtst du denn das Verzeichnis zum speichern/ laden?

mit absoluten Pfaden kannst du anderes angeben,
bei relativen Pfaden benutze ../../other (../ steht für 'ein Verzeichnis höher')


----------



## qwertz (21. Nov 2006)

Funktioniert wenn ich Test.txt nach dem deployen ins webroot kopiere.
out.println("<a href=Test.txt>klick</a>");

Wenn ich Test.txt ein Verzeichnis höher speichere und versuche wie unten darauf zugreifen bekomm ich eine Fehlermeldung das die Datei nicht zu finden ist
out.println("<a href=../Test.txt>klick</a>");

Wenn ich den absoluten Pfad im Link übergebe funktioniert es auch nicht.
C:\Sun\AppServer\domains\domain1\applications\j2ee-apps\onlinecareer\Test.txt


----------



## NullPointerException (23. Nov 2006)

Hi!

Dein Problem stellt sich wie folgt dar: Du speicherst die Dateien innerhalb des Webroot-Verzeichnis und kannst dann von außen direkt drauf zugreifen, also z.B. mittels http://server/webapp/Text.txt. Dein HREF auf "Text.txt" funktioniert dann. Der Hintergrund ist, daß hier von außen zugegriffen wird und nach außen ist nur dein webroot zu sehen.

Du kannst dir helfen, indem du ein Servlet schreibst, welches den Filezugriff regelt. Also wannimmer eine Anfrage nach webroot/... kommt, die nicht zu einer JSP oder einem Servlet paßt, springt das Ersatz-Servlet ein, liest auf dem Request den gesuchten Dateinamen aus und holt genau diese Datei aus einem Verzeichnis außerhalb von Webroot und liefert sie zurück.

Schwierig kann hier aber werden, daß du keinen MIME-Type mitgibst, was die meisten Browser dann dazu veranlaßt, die Datei zu speichern und nicht anzuzeigen. Wenn es sich immer um Text-Dateien handelt, kannst du im Servlet natürlich den MIME-Type auf text/text setzen.

Falls du ein Beispiel brauchst, sag bescheid, ich hab sowas daheim schonmal gecoded.

System.exit(0), NullPointerException


----------



## qwertz (24. Nov 2006)

Hallo NullPointerException,

danke für deine Antwort.
Dein Beispiel würde mir wirklich weiterhelfen allerdings stellt sich mein Problem etwas anders da.
Wie gesagt ich hab jeweils ein Servlet für up- und download geschreiben. 
Beim Upload werden meine Dateien standart mäßig in C:\Sun\AppServer\domains\domain1\config gespeichert. Ich kann auch in Verzeichnise darüber navigieren und dort speichern.
Files herunterladen kann ich nur aus:  C:\Sun\AppServer\domains\domain1\applications\j2ee-apps\onlinecareer\OnlineCareer-WebModule_war
wenn ich jetzt versuche mittels ../applications\ ..... in dieses Verzeichnis zu speichern bekomm ich immer eine Fehlermeldung.

Ich denke aber das dein SourceCode Beispiel trotzdem mein Problem lösen könnte. Dann muss ich aber noch wissen wie ich die Dateien über den Webbrowser wieder löschen kann.

Das die Files im Webroot beim deployen gelöscht werden kann ich überigens dadurch verhinder das ich im Projekt Ordner anlege und mindestens eine Datei darin speichere. 

Schon mal danke im Voraus


----------

