Play Framework获取资产服务器端

时间:2014-11-24 23:10:05

标签: playframework

这似乎应该非常简单,但我无法弄清楚。我需要从我的应用程序服务器端的/ public文件夹中获取文件。我可以使用javascript或html获取它们没有问题。我正在使用Java,玩2.2.1

我试过搞乱这个

Assets.at("/public", "images/someImage.png");

但我不确定如何将该Action对象转换为File对象。

2 个答案:

答案 0 :(得分:2)

公众&#39;文件夹可能在部署环境中不存在(使用$ activator stage),因为资产被打包到位于target/universal/stage/lib/<PROJECT_NAME>-assets.jar的.jar文件中。

因此,将java.io.File实例添加到该位置是不可能的AFAIK。

然而,这是我想要读取文件的字节(并将它们转换为字符串 - 这就是我需要的东西):

SomeController.java

private String getSomeFile() throws IOException {
    InputStream in = null;
    ByteArrayOutputStream out = null;

    try {
        in = Play.application().resourceAsStream("public/some/file.txt");
        out = new ByteArrayOutputStream();
        int len;
        byte[] buffer = new byte[1024 * 16];

        while ((len = in.read(buffer)) >= 0) {
            out.write(buffer, 0, len);
        }

        return new String(out.toByteArray(), "utf-8");
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) { /* ignore */ }
        }
        if (out != null) {
            try {
                out.close();
            } catch (IOException e) { /* ignore */ }
        }
    }
}

注意:我使用的是Play 2.3.7。我不确定这是否适用于2.2.1。

希望这有助于任何人。

答案 1 :(得分:-1)

Play.application().getFile将加载相对于当前应用程序路径的文件。

所以:

Play.application().getFile("public/images/someImage.png");