如何通过Play路由器解析模块中文件的路径

时间:2012-10-16 09:40:13

标签: playframework playframework-1.x

我有一组SVG图像文件,它们是Play模块的一部分,由多个Play应用程序共享。对于不支持SVG(* cough * IE6)的旧浏览器,我编写了一个控制器,根据浏览器的用户代理字符串将这些转换为PNG格式。

为此,我需要访问原始SVG文件。但是,该文件可能位于模块的/public/images目录或应用程序中。 Play路由器能够无缝地解决任一情况(即/public/images/foo.svg的GET请求始终有效,foo.svg文件是否在应用程序的/public/images目录中,或者应用程序的/public/images目录)。因此,我想利用Play的路由器逻辑来查找文件,获取其绝对路径,并将其提供给转换库。

这可能吗?我在Play的Router类中尝试了一些方法,但他们找不到该文件。也许有一种方法可以通过正常的路由逻辑在服务器中发出一种内部GET请求,并以字节流的形式接收结果?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

使用播放VirtualFile执行此操作

Play.getVirtualFile("public/images/foo.svg")

答案 1 :(得分:0)

在文件系统中为这些文件创建单独的文件夹并将它们上传到应用程序之外是不是更容易?

如果发生变化,您将无需重新部署整个应用程序,并且您将拥有文件系统中文件的真实路径。 BTW,这对于其他静态(不需要编译)无论如何都是好主意,你需要在前端使用单独的HTTP服务器或者写一个动作来为浏览器提供文件(恕我直言第一选项更快)

相关问题