如何从Java中的响应中读取Zip文件?

时间:2016-09-15 08:33:43

标签: java rest jax-rs

我目前正在研究JAX-RS,我试图发送和接收Zip文件。目前发送zip文件作为回应,我可以使用下面的代码实现它(通过在浏览器中输入URL验证了zip下载),但是我不清楚编写代码逻辑到从响应中读取Zip文件。

请帮助我实现此功能。

@GET
@Produces({"application/zip"})
@Path("getProduct")
public Response getProduct() {
    String METHODNAME = "getProduct";
     if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
            LOGGER.entering(CLASSNAME, METHODNAME);
     }
     File file;
     try {
         Properties prop = getProp();
         file = new File(prop.getProperty("ZipLocation")+prop.getProperty("ProductZip"));
         byte[] buffer = new byte[5120];
         FileOutputStream fos = new FileOutputStream(file);
         ZipOutputStream zos = new ZipOutputStream(fos);
         ZipEntry ze= new ZipEntry(prop.getProperty("ProductOutfile"));
         zos.putNextEntry(ze);
         FileInputStream in = new FileInputStream("C:\\Documents\\ProductExtract.xml");
         int len;
         while ((len = in.read(buffer)) > 0) {
             zos.write(buffer, 0, len);
         }
         in.close();
         zos.closeEntry();
         zos.close();
     } catch (FileNotFoundException ex) {
            LOGGER.logp(Level.SEVERE, CLASSNAME, METHODNAME, ex.getMessage(), ex);
            return Response.status(204).entity(ex.getMessage()).build();
     } catch (Exception ex) {
        LOGGER.logp(Level.SEVERE, CLASSNAME, METHODNAME, ex.getMessage(), ex);
        return Response.status(204).entity(ex.getMessage()).build();
     }
     return Response.ok(file, "application/zip").header("Content-Disposition", "attachment; filename=\""+file.getName()+"\"")
            .header("Content-Type", "application/zip").header("Set-Cookie", "fileDownload=true; path=/").build();
}

请告诉我如何通过上述代码的回复来阅读zip文件。

1 个答案:

答案 0 :(得分:4)

使用JAX-RS Client API后,您的客户端代码可能如下:

Client client = ClientBuilder.newClient();
InputStream is = client.target("http://localhost:8080")
                       .path("api").path("getProduct")
                       .request().accept("application/zip")
                       .get(InputStream.class);

ZipInputStream zis = new ZipInputStream(is);

然后阅读ZipInputStream的内容。