使用Java in Play Framework访问公共资产



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

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

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

但我在Java代码中找不到任何文档或代码示例来完成这项工作。我刚刚找到了一个controllers.Assets类,但不清楚如何使用它。如果这是必须使用的类,是否应该注入它?

我终于找到了一种访问公共文件夹的方法,即使是从生产模式的应用程序。为了能够在分布式版本中访问/复制,需要在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/#!主题/播放框架/sVDoEtAzP-U

资产通常在"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);

相关内容

最新更新