2013-12-23 3 views
0

Grails 웹 앱이 있습니다. 현재 정적 이미지 파일을 내 사용자에게 제공하고 있습니다. StackOverflow에서 이미지를 스트림으로 제공하여 해당 소스를 숨기는 방법에 대해 설명하는이 게시물을 보았습니다. 내 질문은, 그 사람이 그것을 정적 파일로 제공하는 v.s로 스트리밍하기 위해 소켓을 열 필요가 있기 때문에 서버에 부하를 가하는 것과 같은 일부 거래가 없다는 것입니다?정적 이미지 파일 제공 대신 스트리밍을 사용하여 이미지 파일 제공

// controller action 
def displayGraph = { 
    def img // byte array 
    //... 
    response.setHeader('Content-length', img.length) 
    response.contentType = 'image/png' // or the appropriate image content type 
    response.outputStream << img 
    response.outputStream.flush() 
} 

그런 다음이 같은 태그의 SRC의 이미지에 액세스 할 수 있습니다 :

<img src="${createLink(controller: 'myController', action: 'displayGraph')}"/> 

답변

0
response.outputStream << img 
response.outputStream.flush() 

당신이 의미하는 경우가 스트리밍되지 않은 : 그것은 단지 자바를 사용하고 http://en.wikipedia.org/wiki/Streaming_media

응답 내용을 제공하는 OutputStream - 서버에서 수행되며 응답은 클라이언트에 반환됩니다. 소켓은 열려 있지 않습니다.

+0

감사합니다. 그래서 이미지의 소스를 숨길 수 있으며 연결이나 소켓을 차지하지 않습니다. 성능 경고가 없습니까? – AlexCon

+0

아니요.이 방법과 리소스를 가져 오는 성능 측면에서 정적 이미지 제공간에 차이가 없습니다. 하지만 정적 이미지를 캐싱하면이 방법을 사용하는 것이 단점입니다. – lukelazarovic

+0

사용자 프로필의 정적 이미지를 웹 응용 프로그램 영역 외부에 저장 한 경우 정적 이미지 링크를 사용하여 사용자에게 제공 할 수는 있지만 해당 이미지에 직접 액세스 할 수 있습니까? – AlexCon