2011-03-27 2 views
0

나는 바이트 배열 내에서GSP, 배열 바이트에서 이미지

JDO 클래스를 이미지를 저장하기 위해 JDO 클래스와 헬퍼 클래스 이미지를 gsp 페이지에서 나는 조리법을 반복하고 이미지를 보여주고 싶다. 이미지 src를 얻으려면 이와 같은 컨트롤러를 사용할 수 있습니다.

def viewImage= { 
    //retrieve photo code here 
    response.setHeader("Content-disposition", "attachment; filename=${photo.name}") 
    response.contentType = photo.fileType //'image/jpeg' will do too 
    response.outputStream << photo.file //'myphoto.jpg' will do too 
    response.outputStream.flush() 
    return; 
    } 

그러나이 방법으로이 컨트롤러에 조리법의 키를 보내고 데이터 저장소에서 이미지를 다시로드해야합니다. (나는 이미 실제로로드했다.하지만 컨트롤러에이 데이터를 보낼 수 없다고 생각한다.) gsp 페이지의 바이트 배열에서 이미지를 표시하는 더 편리한 방법은 없습니까?

+1

http://stackoverflow.com/questions/4502278/grails-displaying-created-image-in-gsp/4502403의 복제본처럼 보입니다. 내 대답은 도움이 될 수있다;) –

+0

안녕 빅터. 댓글 주셔서 감사합니다. 이 문제에 대한 당신의 제안을 보지 못했습니다. 그러나 이것은 내가 찾고 있던 것과 똑같은 것처럼 보입니다. 내가 집에있을 때 이걸 시험해 볼거야. 감사합니다 – superbly

+0

그래서 많은 종류의 단어가 아니라 하나의 upvote xD –

답변

1

나는 업로드 된 파일에 대한 바이트 []와 메타 정보를 가지고있는 파일 도메인 클래스와 비슷한 Usecase를 가지고있다. 파일을 다운로드하려면, 내가 사용 :

def fileDownload = { 
    long id = params.id as long 
    def file = File.get(id) 
    assert file 
    def fileName = URLEncoder.encode(file.name) 
    response.addHeader("content-disposition", "attachment;filename=$fileName") 
    response.contentType = file.contentType 
    response.contentLength = file.data.size() 
    response.outputStream << file.data 
} 

이상 내가 너무 많이 걱정하지 것이다를 통해 파일을 다시로드에 대해서, 2 레벨 캐싱 그것에 대해 관심 최대 절전 모드. 다운로드 요청에서 파일을로드하지 않는 것이 좋은 이유가 있다면 이전 호출에서이 파일을 http 세션에 저장할 수 있습니다. HTTP 세션이 저장의 단점 : 많은 동시 세션, 높은 메모리 소비

  • 의 경우

    • 당신이 최대 절전 모드에서 이상한 예외를 볼 수 있습니다 (즉에 대한 확인!)
    • 모든 것을 저장 http 세션에서 직렬화가 가능해야합니다.
  • +0

    당신의 대답에 고마워. 그래도 다른 해결책을 기대하고 있었다. – superbly