2012-10-16 35 views
0

我有一组SVG图像文件,它们是Play模块的一部分,由多个Play应用程序共享。对于不支持SVG(*咳嗽* IE6)的旧浏览器,我已经编写了一个控制器,根据浏览器的用户代理字符串将它们转换为PNG格式。如何通过播放路由器解析模块中文件的路径

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

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

在此先感谢您的帮助。

+0

BTW isn为每个浏览器使用一种格式(PNG)会更好吗? – biesior

+0

我正在使用的模块包含SVG。 –

回答

1

使用发挥VirtualFile做到这一点

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

完美的工作!非常感谢。 –

0

是不是更容易只是创造... ...单独的文件夹在文件系统中的这些文件,并将其上传分开的应用程序?

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

+0

接下来的问题是,每次添加新的SVG时都必须转换SVG。绝大多数用户使用支持SVG的浏览器,所以我不想每次将新图像添加到项目时添加工作。因此,这个想法是为IE6用户添加即时转换,而不再考虑它。 –