1

我在 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”显然是我在这个例子中使用的文件名

4

1 回答 1

2

问题是,在 Java 代码中使用 new File(),在启动 JBoss 时相对于命令行位置的位置创建文件,而 JSP 中的路径相对于 webapp 上下文。

不确定,但我认为您可以尝试:

File file = new File(getPortletContext().getRealPath("svg/topBar.svg"))

于 2013-06-04T08:32:31.450 回答