Как разрешить путь к файлу в модуле через роутер Play

У меня есть набор файлов изображений SVG, которые являются частью модуля Play и используются несколькими приложениями Play. Для старых браузеров, не поддерживающих SVG (*кашель* IE6), я написал контроллер, который преобразует их в формат PNG на основе строки пользовательского агента браузера.

Чтобы это работало, мне нужно получить доступ к исходному файлу SVG. Однако файл может находиться в каталоге /public/images модуля или в каталоге приложения. Маршрутизатор Play может беспрепятственно разрешить любой случай (т. е. запрос GET к /public/images/foo.svg работает всегда, независимо от того, находится ли файл foo.svg в каталоге приложения /public/images или в каталоге приложения /public/images). Поэтому я хотел бы использовать логику маршрутизатора Play, чтобы найти файл, получить его абсолютный путь и передать его в библиотеку преобразования.

Это возможно? Я попробовал несколько методов в классе Router Play, но они не смогли найти файл. Возможно, есть способ сделать своего рода внутренний запрос GET на сервере с помощью обычной логики маршрутизации и получить результат в виде потока байтов?

Заранее спасибо за вашу помощь.


person Will Hains    schedule 16.10.2012    source источник
comment
Кстати, не лучше ли использовать один формат (PNG) для каждого браузера?   -  person biesior    schedule 16.10.2012
comment
Модуль, который я использую, содержит SVG.   -  person Will Hains    schedule 21.10.2012


Ответы (2)


Для этого используйте play VirtualFile.

Play.getVirtualFile("public/images/foo.svg")
person Seb Cesbron    schedule 16.10.2012

Не проще ли просто создать... отдельную папку в файловой системе для таких файлов и загружать их отдельно от приложения?

В случае изменений вам не нужно будет переустанавливать все приложение, а также у вас будет реальный путь к файлу в файловой системе. Кстати, это хорошая идея для других статических (не требующих компиляции), в любом случае вам нужно будет использовать отдельный HTTP-сервер во внешнем интерфейсе или написать действие для обслуживания файлов в браузере (ИМХО первый вариант быстрее)

person biesior    schedule 16.10.2012
comment
Проблема в том, что мне придется преобразовывать SVG каждый раз, когда добавляется новый. У крайнего большинства пользователей браузеры с поддержкой SVG, поэтому не хочется каждый раз прибавлять работу при добавлении нового изображения в проект. Таким образом, идея состоит в том, чтобы добавить преобразование «на лету» для пользователей IE6 и больше никогда об этом не думать. - person Will Hains; 21.10.2012