1

我正在尝试从 servlet 访问资源文件,但收到HTTP 错误 500 - 拒绝访问

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

我在谷歌应用引擎上。

任何帮助表示赞赏!

4

3 回答 3

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 回答
3

我不确定 Google App Engine,但根据我的经验,跨容器和平台工作的唯一解决方案是使用 ServletContext.getRealPath()。

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

规范说:使用正斜杠和前导斜杠。这为您提供了平台独立性,并且您不依赖于进程的当前目录。

于 2009-09-09T00:06:08.777 回答
1

如果您使用单路径分隔符,它是否有效?

(更新为使用相对路径):

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

您需要转义字符串中的“\”字符,因此使用“\”,但只需要一个“/”即可。

更新:可能是正在处理的路径与您期望的不一样,您可以尝试记录文件的绝对路径(使用 file.getAbsolutePath())来检查这一点。

要检查的另一件事是该进程对文件夹/文件具有读取权限。如果您不在 Windows 上,这可能是个问题。

于 2009-08-09T13:26:27.247 回答