Java 在响应中返回图像

Java 在响应中返回图像,java,image,tomcat,jersey,response,Java,Image,Tomcat,Jersey,Response,我需要在我的一个应用程序中返回一个图像(作为流)。经过短暂的谷歌搜索,我找到了一个简单的解决方案,但它只适用于Opera和Chrome。Firefox和Safari将显示一个简单的文本,其中包含响应为流的信息 我现在是这样做的: @GET @Path("/getImage") @Produces({ "images/gif", "images/png", "images/jpg", MediaType.APPLICATION_JSON }) public Response getIm

我需要在我的一个应用程序中返回一个图像(作为流)。经过短暂的谷歌搜索,我找到了一个简单的解决方案,但它只适用于Opera和Chrome。Firefox和Safari将显示一个简单的文本,其中包含响应为流的信息

我现在是这样做的:

@GET
@Path("/getImage")
@Produces({
     "images/gif", "images/png", "images/jpg", MediaType.APPLICATION_JSON
})
 public Response getImage(@QueryParam("width") Integer width, @QueryParam("height") Integer height) {

     //SOME UNRELEVANT STUFF...

     String mmcpath = gi.filepath;

     BufferedImage image = ImageUtil.getImageFromPath(mmcpath);

     if (image != null) {

         // resize the image to fit the GUI's image frame
         image = ImageUtil.resize(image, width, height);
         InputStream is = ImageUtil.getStreamFromImage(image, FileHelper.getFileSuffix(mmcpath));

         if (is != null) {
             return Response.ok(is).build();
         } else {
             return Response.noContent().build();
         }
     }



     return Response.noContent().build();
 }
我希望有人知道我如何改变这个方法,使它与其他浏览器也工作


谢谢

我做了更多的研究,解决了我的问题。(注意:我认为这不是100%的运动衫)

首先,必须在控制器中定义以下两个变量:

@Context
HttpHeaders header;
@Context
HttpServletResponse response;
之后,您可以使用以下代码段处理图像返回:

//The mmcpath is the path to the image
BufferedImage image = ImageUtil.getImageFromPath(mmcpath);

if (image != null) {

    image = ImageUtil.resize(image, width, height);

    response.setContentType("images/jpg");
    response.setHeader("Content-Type", FileHelper.getNameFromPath(mmcpath));
    response.setHeader("Content-Disposition", "inline; filename=\"" + FileHelper.getNameFromPath(mmcpath) + "\"");

    OutputStream out = response.getOutputStream();
    ImageIO.write(image, "jpg", out);
    out.close();

    return Response.ok().build();
}
下面是我在ImageUtil.getImageFromPath(mmcpath)中使用的代码;只是为了完成整件事

ImageIO.read(new File(path))

我希望其他人也能使用这些片段

很好的例子!为了完整起见,还应该粘贴ImageUtil resize方法。