Java 从JAX-RSservlet动态创建图像
是否可以创建PNG图像并将其作为JAX-RS资源的一部分直接输出到浏览器 大概是这样的:Java 从JAX-RSservlet动态创建图像,java,image,jax-rs,dynamic-image-generation,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 ou
@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();
}
}
这样行吗?我必须处理正确的标题(内容类型),还是由@products
注释完成?能否将图像输出为响应
?我可以从流构建响应吗?看一下:
谢谢。我通过将图像创建为字节输出流并从中生成响应,成功地实现了类似的操作。或者,您可以从资源方法返回任何InputStream实现,您的JAX-RS实现应该能够从那里获取它。@Hank,作为字节数组提前读取图像是浪费内存的。对于大型映像,这将导致内存管理问题。最好是返回一个InputStream,让容器担心将流传输给调用者。@Isaac,绝对,我完全同意(我现在有了更多的经验)。@Socrates确实如此。
@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();
}