在JSF中将一组XML文件下载为zip文件

时间:2013-08-07 12:35:17

标签: java jsf

我有一个字符串数组,其中每个字符串都包含一些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();

但我无法将其作为附件下载。请指导我!!

2 个答案:

答案 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");