Search code examples
javaplayframeworkassets

Access public assets with Java in Play Framework


Is it possible to access Assets inside the Java code in Play Framework? How?

We access assets from the scala HTML templates this way:

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

But I could not find any documentation nor code example to do it from inside the Java code. I just found a controllers.Assets class but it is unclear how to use it. If this is the class that has to be used, should it maybe be injected?


Solution

  • I finally found a way to access the public folder even from a production mode application. In order to be accessible/copied in the distributed version, public folder need to be mapped that way in build.sbt:

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

    The files are then accessible in the public folder in the distributed app in production form the Java code:

      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;
      }
    

    This post put me on the right way to find the solution: https://groups.google.com/forum/#!topic/play-framework/sVDoEtAzP-U