在 Play Framework 中使用 Java 访问 public 资产

Access public assets with Java in Play Framework

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

我们以这种方式从 Scala HTML 模板访问资产:

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

但我找不到任何文档或代码示例来从 Java 代码中执行此操作。我刚找到一个 controllers.Assets class 但不清楚如何使用它。如果这是必须使用的 class,是否应该注入它?

资源通常在"public"文件夹中,我不知道你想怎么用你的图片所以我用了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);

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

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

然后可以在分布式应用程序的 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;
  }

这个 post 让我找到了正确的解决方法:https://groups.google.com/forum/#!topic/play-framework/sVDoEtAzP-U