从JAX-RS servlet动态创建映像

Han*_*ank 4 java image jax-rs dynamic-image-generation

是否可以创建PNG图像并将其作为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();
  }
}
Run Code Online (Sandbox Code Playgroud)

这会有用吗?我是否必须处理正确的标题(Content-Type),还是由@Produces注释完成?可以输出图像作为Response?我可以Response从流中构建一个?

dwe*_*mer 8

看看http://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e323:

 @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();
 }
Run Code Online (Sandbox Code Playgroud)

  • 或者,您可以从资源方法返回任何InputStream实现,并且您的JAX-RS实现应该能够从那里获取它. (3认同)
  • @Hank,提前读取图像作为ByteArray是浪费内存.对于大图像,这将导致内存管理问题.返回一个InputStream并让容器担心将流传输给调用者总是更好. (2认同)