是否可以在Assets
的Java代码中访问Play Framework
?怎么样?
我们通过以下方式从scala HTML模板访问资产:
<img src="@routes.Assets.versioned("images/myimage.png")" width="800" />
但是我找不到任何文档或代码示例来从Java代码内部进行操作。我刚刚找到了controllers.Assets
类,但尚不清楚如何使用它。如果必须使用该类,是否应该将其注入?
答案 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