java - 通过 REST 发送/接收图像

标签 java android web-services jersey grizzly

我正在使用 grizzly 作为 Java Rest 服务,并在 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();
}

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

最佳答案

第 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;
}

关于java - 通过 REST 发送/接收图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42432609/

相关文章:

java - 如何在命令行中将参数传递给testng?

java - 通过 javax 拦截器记录用户的 session ID

android - 设备未显示在 DDMS 中

android - 水平进度条不会增加以显示 DialogFragment 中的进度

java - 如何通过 asyncTask 从不同的 URL 下载不同文件夹中的文件?

java - 试图调用子方法,但将其实例化为父方法

java - 获取包中具有特定注释的所有方法

java - EJB WebService (JAX-WS) 的 WSDL 的 URL 是什么?

java - Apache Camel CXF 响应 202 而不是 200

web-services - 简单的在线键值存储服务