IT序号网

playframework之Play Framework 获取 Assets 服务器端

third_qq_4accc0ab0fa5b582 2024年05月22日 编程语言 533 0

这看起来应该非常容易,但我想不通。我需要从应用程序服务器端的/public 文件夹中获取文件。我可以毫无问题地使用 javascript 或 html 获取它们。我用的是Java,玩2.2.1

我试过把这个弄乱

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

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

请您参考如下方法:

'public' 文件夹可能不会存在于部署环境中的文件系统中(使用 $ activator stage ),因为 Assets 被打包到位于 target/universal/stage/lib/<PROJECT_NAME>-assets.jar 的 .jar 文件中.

因此,据我所知,不可能将 java.io.File 实例获取到该位置。

但是,这是我想出的读取文件字节的方法(并将它们转换为字符串 - 这正是我需要的):

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。

希望这对任何人都有帮助。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!