在Play Framework中使用Java访问公共资产

时间:2018-11-21 13:08:45

标签: java playframework assets

是否可以在Assets的Java代码中访问Play Framework?怎么样?

我们通过以下方式从scala HTML模板访问资产:

<img src="@routes.Assets.versioned("images/myimage.png")" width="800" />

但是我找不到任何文档或代码示例来从Java代码内部进行操作。我刚刚找到了controllers.Assets类,但尚不清楚如何使用它。如果必须使用该类,是否应该将其注入?

2 个答案:

答案 0 :(得分:0)

资产通常位于“公共”文件夹中,并且我不知道您要如何使用图像,因此我使用了ImageIO

File file = new File("./public/images/nice.png");
boolean exists = file.exists();
String absolutePath = file.getAbsolutePath();
try {
    ImageInputStream input = ImageIO.read(file); //Use it
} catch (IOException e) {
    e.printStackTrace();
}

System.out.println("EX = "+exists+" - "+absolutePath);

答案 1 :(得分:0)

我终于找到了一种从生产模式应用程序访问公用文件夹的方法。 为了可以在分布式版本中访问/复制,需要在build.sbt中以这种方式映射公用文件夹:

import NativePackagerHelper._
mappings in Universal ++= directory("public")

然后可以使用Java代码以生产形式在分布式应用程序的公共文件夹中访问文件:

  private static final String PUBLIC_IMAGE_DIRECTORY_RELATIVE_PATH = "public/images/";

  static File getImageAsset(String relativePath) throws ResourceNotFoundException {
     final String path = PUBLIC_IMAGE_DIRECTORY_RELATIVE_PATH + relativePath;
     final File file = new File(path);
     if (!file.exists()) {
       throw new ResourceNotFoundException(String.format("Asset %s not found", path));
     }
     return file;
  }

这篇文章使我找到了解决问题的正确方法:https://groups.google.com/forum/#!topic/play-framework/sVDoEtAzP-U