2012-10-16 71 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用戶添加即時轉換,而不再考慮它。 –