1

例如,我想在一个响应中下载一个 zip 文件和一个 csv 文件。除了将这两个文件压缩到一个 zip 文件中之外,还有其他方法吗?

4

3 回答 3

3

尽管 ServletResponse 并不打算这样做,但我们可以通过编程方式对其进行调整以发送多个文件,除 IE 之外的所有客户端浏览器似乎都能正确处理这些文件。下面给出了一个示例代码片段。

response.setContentType("multipart/x-mixed-replace;boundary=END");
ServletOutputStream out = response.getOutputStream();
out.println("--END");
for(File f:files){
      FileInputStream fis = new FileInputStream(file);
      BufferedInputStream fif = new BufferedInputStream(fis);
      int data = 0;
      out.println("--END");
      while ((data = fif.read()) != -1) {
        out.write(data);
      }
      fif.close();
      out.println("--END");
      out.flush();
}
out.flush();
out.println("--END--");
out.close();

这在 IE 浏览器中不起作用。NB - Try Catch 块不包括在内

于 2013-10-18T05:04:52.487 回答
1

Jason Hunter 开发的用于处理具有多个部分的 servlet 请求和响应的代码多年来一直是事实。您可以在servlets.com上找到它

于 2013-10-18T06:25:05.840 回答
0

不,你不能那样做。原因是,每当您想发送任何请求中的数据时,您都使用请求中可用的 Steam 并使用 检索此数据request.getRequestParameter("streamParamName").getInputStream(),如果您已经使用此流,一旦您将无法再次获取它,请记下它。

上面提到的例子是谷歌在发送带有多个附件的多部分电子邮件时也使用的一个调整。为了实现这一点,他们为每个附件定义了边界,客户端在检索和呈现这些信息时必须注意这些边界。

于 2013-10-18T06:22:26.280 回答