サーブレットからリソース ファイルにアクセスしようとしていますが、HTTP エラー 500 - アクセスが拒否されました:
File file = new File("//warChildFolder//myFile.txt");
InputStream is = new FileInputStream(file); // <--error on this line
私はgoogle-app-engineを使用しています。
どんな助けでも大歓迎です!
サーブレットからリソース ファイルにアクセスしようとしていますが、HTTP エラー 500 - アクセスが拒否されました:
File file = new File("//warChildFolder//myFile.txt");
InputStream is = new FileInputStream(file); // <--error on this line
私はgoogle-app-engineを使用しています。
どんな助けでも大歓迎です!
Google App Engine についてはよくわかりませんが、私の経験では、コンテナとプラットフォーム間で機能する唯一のソリューションは、ServletContext.getRealPath() を使用することです。
new File(servletContext.getRealPath("/WEB-INF/warChildFolder/myFile.txt"));
仕様によると、スラッシュと先頭のスラッシュを使用してください。これにより、プラットフォームに依存せず、プロセスの現在のディレクトリに依存しなくなります。
Google App Engine のドキュメントでは、ファイルの「ホワイト リスト」について説明しています。それはここで機能していますか?
私もこれについて疑問に思います:
File file = new File("//warChildFolder//myFile.txt");
先頭のスラッシュはこれを絶対パスにしませんか?
私はこのように試してみます:
File file = new File("WEB-INF/warChildFolder/myFile.txt");
WAR ルートからの相対パスを作成し、WEB-INF について明示します。
単一のパスセパレーターを使用すると機能しますか?
(相対パスを使用するように更新):
File file = new File("warChildFolder/myFile.txt");
文字列では "\" 文字をエスケープする必要があるため、"\" を使用しますが、必要なのは "/" だけです。
更新: 処理中のパスが期待どおりではない可能性があります。これを確認するには、(file.getAbsolutePath() を使用して) ファイルの絶対パスをログに記録してみてください。
もう 1 つチェックする必要があるのは、プロセスがフォルダー/ファイルに対する読み取りアクセス許可を持っていることです。Windows を使用していない場合、これは問題になる可能性があります。