2014-01-22 2 views
1

Мне нужно вернуть изображение (как поток) в одном из моих приложений. После короткого google я нашел простое решение, но оно работает только для 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(); 
} 

Я надеюсь, что кто-то имеет представление о том, как я должен изменить этот метод, чтобы заставить его работать с другими браузерами тоже.

Благодаря

ответ

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

Я надеюсь, что кто-то еще сможет использовать эти фрагменты!

+0

Отличный пример! Вы должны вставить свой метод resize для ImageUtil только для полноты. –

Смежные вопросы