【问题标题】:Access public assets with Java in Play Framework在 Play Framework 中使用 Java 访问公共资产
【发布时间】:2018-11-21 13:08:44
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您希望在 HTML 文件中使用 JAVA 吗?
  • 不,我只想从我的 Java 代码中的 Asset 文件夹中加载图像。这只是展示我们如何在 scala 中访问它的示例。
  • 有人找到这个问题的答案吗?

标签: java playframework assets


【解决方案1】:

我终于找到了一种即使从生产模式应用程序也可以访问公用文件夹的方法。 为了在分布式版本中可以访问/复制,需要在 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢,我已经尝试过了,但无法访问生产中的文件夹,因为应用程序在分发时没有以相同的方式打包。终于找到了在分发包中包含公用文件夹的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    相关资源
    最近更新 更多