Scala 部署到生产环境后在PlayFramework中写入/public目录

Scala 部署到生产环境后在PlayFramework中写入/public目录,scala,playframework,playframework-2.2,Scala,Playframework,Playframework 2.2,在PlayFramework 2.2.x中,使用play dist后,我在读取和写入/public目录时遇到问题。这是一个已知的问题吗?是唯一一个用全局路径读/写另一个目录的解决方案吗 这是我的示例代码: val imageDirectory = "images/twitpics/" val localPrefix = "/public/" val publicPrefix = "/assets/" val files = Play.getFile(localP

在PlayFramework 2.2.x中,使用
play dist
后,我在读取和写入
/public
目录时遇到问题。这是一个已知的问题吗?是唯一一个用全局路径读/写另一个目录的解决方案吗

这是我的示例代码:

    val imageDirectory = "images/twitpics/"
    val localPrefix = "/public/"
    val publicPrefix = "/assets/"

    val files = Play.getFile(localPrefix + imageDirectory)
      .listFiles.filter(_.getName.takeRight(3) == "jpg")

    val randomIndex = _rand.nextInt(files.length)
    val imageFile = files(randomIndex)


dist
之后,public/directory被打包到应用程序jar中,应用程序jar放在类路径上,因此您无法通过文件系统访问或写入它。

您遇到了什么问题?这不是运行进程的用户的访问权限的问题吗?可能是,但我想我已经正确设置了这些权限。它在一个罐子里,所以我不能检查谢谢,我就是这么想的。还有别的选择吗?无论是在部署策略上还是在书面形式上?最好的方法是使用S3+CloudFront或类似的工具,它们真正的目标是从文件系统服务静态资产。谢谢James。具体地说,我正在尝试从映像目录中读取文件(以便可以根据需要进行更新)并读取/写入配置文件。听起来我需要从其他地方(比如Nginx)为他们提供服务。但是如果我使用nginx,如果Play没有提供该目录,我还能使用Play.getFile(“/assets/images”)作为IO吗?有人知道这个问题的答案吗?这在很大程度上取决于您的需要,但有一种方法可以做到(如果您不需要扩展)只需在服务器文件系统的某个地方使用play附带的ExternalAssets路由器即可。
private val _jsonConfigFile = "/public/data/data.json"
def writeJsonToFile(content: String) = {
    import java.io._

    val pw = new PrintWriter(Play.getFile(_jsonConfigFile))
    pw.write(content)
    pw.close
}