0

我有戏!生成 .png 图像文件的应用程序,作为我的 Web 客户端随后显示的可视化过程的一部分。我以为我正确设置了写入路径,但只在 DEV 模式下进行了测试。切换到生产模式后,我的 Web 客户端会尝试从正确的位置获取文件,但我的 Java 代码不再将我的文件写入正确的位置。

基本上在 DEV 中,写入路径类似于:

project/application/public/images/image.png

在生产环境中,写入路径需要类似于:

project/application/target/scala-2.10/classes/public/images/image.png

我收集了以下代码来指定文件写入位置是否可行?

//Set up paths correctly regardless of where the application is running
String basePath = Play.application().path().getPath();
String fullPath = basePath + "/public/images/image.png";

好吧,除非我搞砸了其他东西,否则它不会像我预期的那样工作 - DEV 与生产的路径没有什么不同。它总是这样结束:

project/application/public/images/image.png

各种帖子(例如:Play!Framework 2.0 paths - play run vs play start)建议在我的 .conf 文件的生产版本中指定路径......我应该使用它来启动我的播放应用程序......但老实说,是有什么原因我发布的代码的一些变体不应该正常工作?

编辑:这可能真的不像我期望的那样工作,因为动态生成的文件通常无法返回,因为 public/ 文件夹中的所有资产都被编译成一个 .jar 文件。

4

1 回答 1

0

如果您使用此代码编写文件:

String basePath = Play.application().path().getPath();
String fullPath = basePath + "/public/images/image.png";

使用时您始终会获得根项目目录路径Play.application().path().getPath();因此,无论您处于生产模式还是开发模式,您都应该获得根项目目录的路径,并且您始终将该文件写入rootprojectdir/public/images/image.png(作为fullpath变量的值)。您可以尝试按照答案或​​您之前阅读过的问题的建议进行操作。这是您的偏好。


笔记:

这里要注意,因为您将生成的文件放在这样的目录中。如果执行play cleanplay clean-all命令,target/*文件和文件夹上的所有文件都将被删除。所以,请注意!

于 2013-05-11T01:32:23.073 回答