2011-04-20 4 views
3

PNG 이미지를 생성하고 JAX-RS 리소스의 일부로 브라우저에 바로 출력 할 수 있습니까? 이 같은JAX-RS 서블릿에서 이미지를 동적으로 생성

뭔가 :

@Path("img/{externalId}") 
@Stateless 
@Produces({"image/png"}) 
public class MyImgResource { 

    @GET 
    public Response (@PathParam("externalId") String externalId) { 
    // create image, write to buffered output stream 

    return Response.ok().entity(stream).build(); 
    } 
} 

겠습니까이 작품? 올바른 헤더 (Content-Type)를 처리해야합니까, 아니면 @Produces 주석으로 처리합니까? Response으로 이미지를 출력 할 수 있습니까? 스트림에서 Response을 만들 수 있습니까?

@GET 
@Path("/images/{image}") 
@Produces("image/*") 
public Response getImage(@PathParam("image") String image) { 
    File f = new File(image); 

    if (!f.exists()) { 
     throw new WebApplicationException(404); 
    } 

    String mt = new MimetypesFileTypeMap().getContentType(f); 
    return Response.ok(f, mt).build(); 
} 

답변

7

http://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e323를 살펴 보자. 나는 ByteOutputStream에 Image를 생성하고 거기에서 Response를 빌드함으로써 비슷하게 관리했다.
+1

들으 : – Hank

+3

또는 리소스 메서드에서 InputStream 구현을 반환하면 JAX-RS 구현에서이 메서드를 가져올 수 있습니다. – dweomer

+1

@Hank, 미리 ByteArray로 이미지를 읽는 것은 메모리 낭비입니다. 큰 이미지의 경우 메모리 관리 문제가 발생합니다. InputStream을 돌려 주면 (자), 컨테이너가 호출 원에 스트림을 전송하는 것에 대해 걱정할 필요가 있습니다. – Isaac

관련 문제