通过REST发送/接收图像

时间:2017-02-24 07:01:53

标签: java android web-services jersey grizzly

我正在使用grizzly进行java休息服务并在Android应用程序中使用这些Web服务。

就“文本”数据而言,它的工作正常。

现在我想在我的Android应用程序中加载图像(来自服务器),使用此休息服务并允许用户从设备更新图像。

我试过这段代码

@GET
@Path("/img3")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getFile()
{
    File file = new File("img/3.jpg");
    return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM).header("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"") // optional
            .build();
}

上面的代码允许我下载文件,但是可以在broswer中显示结果吗?像这样     http://docs.oracle.com/javase/tutorial/images/oracle-java-logo.png

1 个答案:

答案 0 :(得分:0)

第1部分的解决方案:

我已根据Shadow

的建议对代码进行了更改
@GET
@Path("/img3")
@Produces("image/jpg")
public Response getFile(@PathParam("id") String id) throws SQLException
{

    File file = new File("img/3.jpg");
    return Response.ok(file, "image/jpg").header("Inline", "filename=\"" + file.getName() + "\"")
            .build();
}

请求的图像将显示在浏览器中

第2部分:    用于转换回Base64编码图像的代码

@POST
@Path("/upload/{primaryKey}")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces("image/jpg")
public String uploadImage(@FormParam("image") String image, @PathParam("primaryKey") String primaryKey) throws SQLException, FileNotFoundException
{
    String result = "false";
    FileOutputStream fos;

    fos = new FileOutputStream("img/" + primaryKey + ".jpg");

    // decode Base64 String to image
    try
    {

        byte byteArray[] = Base64.getMimeDecoder().decode(image);
        fos.write(byteArray);

        result = "true";
        fos.close();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    return result;
}