我有一个字符串数组,其中每个字符串都包含一些xml内容。我必须将每个字符串放入一个文件中,最后必须将所有xmls作为zip文件下载。
我们如何使用JSF实现它。
示例代码:
String content="<?xml version="1.0" encoding="UTF-8"?>
<Head>
<Car>
<model>i10</command>
<price></target>
</car></Head>";
HttpServletResponse response =
(HttpServletResponse) FacesContext.getCurrentInstance()
.getExternalContext().getResponse();
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
ZipEntry ze= new ZipEntry("spy.log");
zos.putNextEntry(ze);
zos.write(content.getBytes());
zos.closeEntry();
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment;filename=fyi.zip");
response.setHeader("Content-Transfer-Encoding", "binary");
response.getOutputStream().flush();
response.getOutputStream().close();
FacesContext.getCurrentInstance().responseComplete();
但我无法将其作为附件下载。请指导我!!
答案 0 :(得分:1)
标题必须先完成。 (如在HTTP中首先写入标题行,然后是内容。)
content.getBytes("UTF-8")
。
不要关闭响应输出流。最后调用zos.finish()
(不关闭而不是zos.close()
- 其中一个必须调用zip)。关闭响应输出流是容器的责任。
(确保除上述代码外没有输出任何内容。)
答案 1 :(得分:-1)
您是否尝试过使用response.addHeader而不是response.setHeader?
response.addHeader("Content-Disposition", "attachment;filename=fyi.zip");
response.addHeader("Content-Transfer-Encoding", "binary");