Frage

Ich versuche, von einem Servlet auf eine Ressourcendatei zugreifen zu können, aber erhalte HTTP -Fehler 500 - Zugriff verweigert:

File file = new File("//warChildFolder//myFile.txt");
InputStream is = new FileInputStream(file); // <--error on this line

Ich bin auf Google-App-Engine.

Jede Hilfe geschätzt!

War es hilfreich?

Lösung

Google App Engine -Dokumente sprechen über "weiße Auflistung" einer Datei. Ist das hier im Spiel?

Ich wundere mich auch darüber:

File file = new File("//warChildFolder//myFile.txt");

Macht der führende Schrägstrich dies nicht zu einem absoluten Weg?

Ich würde es so versuchen:

File file = new File("WEB-INF/warChildFolder/myFile.txt");

Machen Sie den Weg relativ zur Kriegswurzel und seien Sie explizit über Web-Inf.

Andere Tipps

Ich bin mir nicht sicher über die Google App Engine, aber meiner Erfahrung nach ist die einzige Lösung, die über Container und Plattformen funktioniert, darin, ServletContext.getrealPath () zu verwenden.

new File(servletContext.getRealPath("/WEB-INF/warChildFolder/myFile.txt"));

In der Spezifikation heißt es: Verwenden Sie Vorwärts -Schrägstriche und einen führenden Schrägstrich. Dies gibt Ihnen eine Plattformunabhängigkeit und Sie verlassen sich nicht auf das aktuelle Verzeichnis des Prozesses.

Funktioniert es, wenn Sie einzelne Pfadabscheider verwenden?

(Aktualisiert, um relative Pfade zu verwenden):

File file = new File("warChildFolder/myFile.txt");

Sie müssen dem "" -Scharakter in Saiten entkommen, also verwenden Sie "", aber ein einzelnes "/" ist alles, was benötigt wird.

UPDATE: Es kann sein, dass der verarbeitete Pfad nicht mit dem gleichen ist, sondern versuchen, den absoluten Pfad der Datei (mit Datei.getabsolutepath ()) zu protokollieren, um dies zu überprüfen.

Eine andere Sache, die Sie überprüfen sollten, ist, dass der Prozess Berechtigungen im Ordner/der Datei gelesen hat. Wenn Sie nicht unter Windows sind, kann dies ein Problem sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top