我正在尝试从 servlet 访问资源文件,但收到HTTP 错误 500 - 拒绝访问:
File file = new File("//warChildFolder//myFile.txt");
InputStream is = new FileInputStream(file); // <--error on this line
我在谷歌应用引擎上。
任何帮助表示赞赏!
我正在尝试从 servlet 访问资源文件,但收到HTTP 错误 500 - 拒绝访问:
File file = new File("//warChildFolder//myFile.txt");
InputStream is = new FileInputStream(file); // <--error on this line
我在谷歌应用引擎上。
任何帮助表示赞赏!
Google App Engine 文档谈论“白名单”文件。这是在玩吗?
我也想知道这个:
File file = new File("//warChildFolder//myFile.txt");
前导斜线不是使它成为绝对路径吗?
我会这样尝试:
File file = new File("WEB-INF/warChildFolder/myFile.txt");
使路径相对于 WAR 根目录并明确说明 WEB-INF。
我不确定 Google App Engine,但根据我的经验,跨容器和平台工作的唯一解决方案是使用 ServletContext.getRealPath()。
new File(servletContext.getRealPath("/WEB-INF/warChildFolder/myFile.txt"));
规范说:使用正斜杠和前导斜杠。这为您提供了平台独立性,并且您不依赖于进程的当前目录。
如果您使用单路径分隔符,它是否有效?
(更新为使用相对路径):
File file = new File("warChildFolder/myFile.txt");
您需要转义字符串中的“\”字符,因此使用“\”,但只需要一个“/”即可。
更新:可能是正在处理的路径与您期望的不一样,您可以尝试记录文件的绝对路径(使用 file.getAbsolutePath())来检查这一点。
要检查的另一件事是该进程对文件夹/文件具有读取权限。如果您不在 Windows 上,这可能是个问题。