2012-10-16 3 views
0

여러 개의 Play 앱에서 공유하는 Play 모듈의 일부인 SVG 이미지 파일 집합이 있습니다. SVG (* cough * IE6)를 지원하지 않는 구형 브라우저의 경우 브라우저의 사용자 에이전트 문자열을 기반으로 PNG 형식으로 변환하는 컨트롤러를 작성했습니다.재생 라우터를 통해 모듈의 파일 경로를 확인하는 방법

이 작업을하려면 원래 SVG 파일에 액세스해야합니다. 그러나 파일은 모듈의 /public/images 디렉토리 나 응용 프로그램의 디렉토리에있을 수 있습니다. Play 라우터는 어느 경우 든 문제없이 원활하게 처리 할 수 ​​있습니다. 즉, foo.svg 파일이 애플리케이션의 /public/images 디렉토리 또는 애플리케이션 /public/images 디렉토리에 있는지 여부와 상관없이 /public/images/foo.svg에 대한 GET 요청이 항상 작동합니다. 따라서 Play의 라우터 로직을 활용하여 파일을 찾고 절대 경로를 얻은 다음 변환 라이브러리에 피드를 제공하고 싶습니다.

이것이 가능합니까? Play의 Router 클래스에서 일부 메서드를 시도했지만 파일을 찾을 수 없습니다. 아마도 정상적인 라우팅 로직을 통해 서버 내부에서 일종의 내부 GET 요청을하고 결과를 바이트 스트림으로 수신하는 방법이 있을까요?

미리 도움을 주셔서 감사합니다.

+0

BTW isn 각 브라우저마다 하나의 형식 (PNG)을 사용하는 것이 더 좋습니다. – biesior

+0

사용중인 모듈에 SVG가 있습니다. –

답변

1

사용은 파일의 파일 시스템에 ... VirtualFile이

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

완벽하게 작동했습니다! 고마워. –

0

는 그냥 쉽게 만들 수 아닌가요 할 별도의 폴더를 재생하고 따로 응용 프로그램의 업로드?

변경된 경우 전체 응용 프로그램을 다시 배포 할 필요가 없으며 파일 시스템의 실제 경로가 있습니다. BTW, 다른 정적 (컴파일 필요 없음)에 대한 좋은 생각은 프런트 엔드에서 별도의 HTTP 서버를 사용하거나 브라우저에 파일을 제공하기위한 작업을 작성해야합니다 (IMHO 첫 번째 옵션이 더 빠름)

+0

그러면 문제는 새로운 SVG가 추가 될 때마다 SVG를 변환해야한다는 것입니다. 대부분의 사용자는 SVG를 지원하는 브라우저를 사용하므로 새 이미지가 프로젝트에 추가 될 때마다 작업을 추가하고 싶지 않습니다. 그래서 아이디어는 IE6 사용자를 위해 즉석 변환을 추가하고 다시 생각하지 않는 것입니다. –

관련 문제