在 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
是否可以在 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