1

サーブレットからリソース ファイルにアクセスしようとしていますが、HTTP エラー 500 - アクセスが拒否されました:

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

私はgoogle-app-engineを使用しています。

どんな助けでも大歓迎です!

4

3 に答える 3

3

Google App Engine についてはよくわかりませんが、私の経験では、コンテナとプラットフォーム間で機能する唯一のソリューションは、ServletContext.getRealPath() を使用することです。

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

仕様によると、スラッシュと先頭のスラッシュを使用してください。これにより、プラットフォームに依存せず、プロセスの現在のディレクトリに依存しなくなります。

于 2009-09-09T00:06:08.777 に答える
3

Google App Engine のドキュメントでは、ファイルの「ホワイト リスト」について説明しています。それはここで機能していますか?

私もこれについて疑問に思います:

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

先頭のスラッシュはこれを絶対パスにしませんか?

私はこのように試してみます:

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

WAR ルートからの相対パスを作成し、WEB-INF について明示します。

于 2009-08-09T14:32:03.290 に答える
1

単一のパスセパレーターを使用すると機能しますか?

(相対パスを使用するように更新):

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

文字列では "\" 文字をエスケープする必要があるため、"\" を使用しますが、必要なのは "/" だけです。

更新: 処理中のパスが期待どおりではない可能性があります。これを確認するには、(file.getAbsolutePath() を使用して) ファイルの絶対パスをログに記録してみてください。

もう 1 つチェックする必要があるのは、プロセスがフォルダー/ファイルに対する読み取りアクセス許可を持っていることです。Windows を使用していない場合、これは問題になる可能性があります。

于 2009-08-09T13:26:27.247 に答える