簡體   English   中英

在Jersey響應中返回圖像

[英]Return an Image in Jersey Response

我需要在我的一個應用程序中返回一個Image(作為Stream)。 經過短暫的谷歌搜索后,我發現了一個簡單的解決方案,但它僅適用於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))

我希望其他人也可以使用這些摘要!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM