如何在Restful Jax-rs中发送图像

时间:2012-05-17 10:48:37

标签: jax-rs

我想从java服务器(Restful Jax-rs)发送图像。 我的客户是Android。

@GET
public Response getUserImage() {
byte[] image =new byte[1024];
return Response.ok(image, MediaType.APPLICATION_OCTET_STREAM).header("content-attachment; filename=image_from_server.png") .build();

但是这里有一个下载框。 所以我想下载没有下载框,当我在浏览器上运行请求URL时,它应该自动打开。 感谢。

2 个答案:

答案 0 :(得分:9)

我认为那是因为您指定了application/octet-stream

我认为您应该使用image/jpegimage/png

@GET
@Produces({"image/png"})
public Response getUserImage() {

    final byte[] image = ...;
    // say your image is png?

    return Response.ok().entity(new StreamingOutput(){
        @Override
        public void write(OutputStream output)
           throws IOException, WebApplicationException {
           output.write(image);
           output.flush();
        }
    }).build();
}

答案 1 :(得分:0)

您可以使用base 64编码对图像进行编码,将基本64位编码的字符串包装在xml或json中,然后将其发送到其余位置。在其余客户端上提取基本64位编码的字符串并对其进行解码以获得最终图像。这也保留了所有文件元数据,但唯一的缺点是图像大小增加了30%。 我已经尝试使用Restlet rest api,我很确定它也可以通过JAX-RS。