我目前正在研究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文件。
答案 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
的内容。