我可以在一个HttpServletResponse中附加多个附件

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

虽然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浏览器中不起作用。 注意 – 尝试不包括Catch块

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

不,你不能那样做。 原因是,无论何时您想要在请求中发送任何数据,您都可以使用请求中的可用蒸汽并使用request.getRequestParameter("streamParamName").getInputStream()来检索此数据,如果您已经使用了此流,请注意你将无法再获得它。

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