我在Liferay portlet中生成.svg文件,将它们保存在位于服务器(JBoss AS)上的svg文件夹中。生成这些文件并将其保存在.java类中,如下所示:
private void saveSVG(Document doc, String fileName) {
// save svg to file
try {
File file = new File("svg/" + fileName + ".svg"); // make file
PrintWriter writer;
writer = new PrintWriter(new FileOutputStream(file)); // write and
// save file
DOMUtilities.writeDocument(doc, writer);
writer.flush();
writer.close();
System.out.println("File path: " + file.getPath());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
该文件保存在server / bin / svg目录中。但是当我尝试访问我的.jsp页面中的文件时,它似乎无法找到该文件(它可能在另一个目录中查找)。如何判断所需文件的位置?我可以使用绝对路径,将其存储在某处并将其传递给.jsp页面,但这似乎不是非常优雅的解决方案。
<object data="svg/topBar.svg" type="image/svg+xml"></object>
或者如何将文件保存到.jsp页面使用上层代码找到它的相对路径?
感谢您的帮助!
编辑:“topBar.svg”显然是我在这个例子中使用的文件名
答案 0 :(得分:2)
问题是在Java代码中使用新的File(),在启动JBoss时,在相对于命令行位置的位置创建文件,而JSP中的路径是相对于webapp上下文的
不确定,但我认为你可以试试:
File file = new File(getPortletContext().getRealPath("svg/topBar.svg"))