我需要在我的一个应用程序中返回一个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();
}
我希望有人知道如何更改此方法以使其与其他浏览器一起使用。
由于
答案 0 :(得分:2)
我做了更多的研究,并且能够解决我的问题。 (注意:我认为这不是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))
我希望其他人也能使用这些片段!