在 Playframework 中获取资源文件作为 InputStream

2022-09-02 00:43:46
Play.classloader.getResourceAsStream(filepath); 

文件路径 - 相对于什么?项目根目录?游戏框架根?绝对路径?

或者也许使用Play.classloader.getResourceAsStream是错误的?


答案 1

在 Play Framework 中,“conf”目录位于类路径上,因此您可以将文件放在那里并使用 getResourceAsStream 打开它。

例如,如果您创建了一个文件“conf/foo.txt”,则可以使用以下命令打开它

Play.classloader.getResourceAsStream("foo.txt");

答案 2

在 Play 2.5.x 中,已弃用接受的答案,因为对类加载器等内容的全局访问正在慢慢被淘汰。处理这种情况的推荐方法是注入一个然后使用它来获得,例如play.api.EnvironmentclassLoaderInputStream

class Controller @Inject()(env: Environment, ...){

  def readFile = Action {  req =>
    ...

    //if the path is bad, this will return null, so best to wrap in an Option
    val inputStream = Option(env.classLoader.getResourceAsStream(path))

    ...
  }
}

推荐