2013-04-24 3 views
0

Grails 프레임 워크를 사용하여 몇 가지 테스트를 해왔으며 이제는 playframework에서 비슷한 작업을하려고합니다.grails 대 playframework의 사진 표시

기본적으로 사진을 표시하고 싶지만 숨기고 (크롤링을 피하고 호스팅을 변경할 수 있도록) 사진 경로를 표시하고 싶습니다.

GSP를 페이지 :

<g:each in="${images}" var="img"> 
     <img class="thumbnail" src='${createLink(controller: "images", action: "displayImage", params:[img: img.name])}'/> 
</g:each> 

컨트롤러 :

<img class="thumbnail" src='/myhost/images/displayImage?img=blabla.jpg' /> 

내 질문 :

    이 보이는

    def displayImage() { 
         File image = new File(IMAGES_DIR.absolutePath +'/' + params.img) 
         if(!image.exists()) { 
          response.status = 404 
         } else { 
          response.setContentType("application/jpg") 
          OutputStream out = response.getOutputStream(); 
          out.write(image.bytes); 
          out.close(); 
         } 
    } 
    

    HTML 생성 된 페이지

  • 이렇게하는 것이 가장 좋은 방법일까요?

  • 성능에 대해서는?

  • http를 사용하여 사진을 표시하는 것보다 속도가 느립니까?

  • Playframework에서 이렇게 할 수 있습니까? 그렇다면 어떻게?

감사합니다.

C.C.

답변

2

정적를 들어 대부분의 아마 원시 HTTP 서버를 사용하여 공공 자원은 가장 빠른 해결책이 될 것입니다, 그래서 그것을 자바 컨트롤러를 통해 "드래그"을하는 데 필요한 생각하지 않습니다.

public static Result displayImage(String imagePath) { 
    File image = new File(SOME_CONFIGURED_FOLDER_WITH_IMAGES +'/' + imagePath) 
    if(!image.exists()) return notFound(); 
    return ok(image).as("image/jpg"); 
} 

을 어쨌든, 당신이 그것을 사용한다 : 재생 요 직접 즉, (내 머리의 상단에서 작성)는 응답 본문으로 File을 반환 할 수 있습니다으로 - 사실 당신은 매우 비슷하지만 훨씬 더 쉽게 플레이와 함께 할 수 있습니다 경우에만 :

  • 당신은 하지 추가 HTTP 서버 (? 그 플레이 하나 내장되어, 기억)
  • 를 당신은 몇 가지 액세스 제어를
  • 을 가지고해야합니다 당신은 몇 가지를 수행 할를 사용하는 거 들었지 즉, perations. 스케일링 등 자르기 감사의이 방법에

(이 경우에, 이럴 그것은 ... 단지 축소판을 만드는 플레이를 사용하고 일반적인 HTTP 서버로 서비스를 제공하는 것이 낫다) :

  • HTTP 서버는 Result에 다시 쓰는 대신 디스크에 저장된 파일을 제공하면되기 때문에 프로세서 자원을 낭비하지 않아도됩니다.
  • 앱이 다른 동적 작업에 집중할 수 있으므로 더 빠릅니다.
  • 당신은 (그리고해야한다), cookie free domains 같은 정적 컨텐츠를 제공하는 최적화 일반적인 웹 마스터의 기술을 사용는 caching headers 등 고급 수 (당신이 할 수있는 OFC를 그 또한 재생 컨트롤러 내에서,하지만 ...)
+0

쿨, 감사 . 이것이 제가 찾고 있던 것입니다. – itsme