java - 在 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 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% Jersey )

首先,您必须在 Controller 中定义以下两个变量:

@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))

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

关于java - 在 Jersey Response 中返回图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21276124/

相关文章:

java - glassfish 负载均衡器配置

java - Selenium 网络驱动程序 : how to use xpath filter?

java - 用于解析未知长度消息的分隔符(最佳实践?)java

java - 将在一台服务器上正常工作的 Tomcat 6 webapp 复制到另一台 Tomcat 6 服务器,得到 Null 组件错误

java - Tomcat6 MySql JDBC 数据源配置

Java:catch语句中的标识符起什么作用?

javascript - html2canvas 等待图片加载

ios - 为什么 Google Chrome 模拟器以 375x667 分辨率显示 iPhone 6?

image - 如何将推文转换为图像

java - Tomcat-8.0.44 : Why a SEVERE log "One or more Filters failed to start"