我创建了zip文件(sample.zip),其中包含一些没有问题的文件。当我打开sample.zip时,它包含了预期的文件。
我想将该zip文件放入http响应中。目前我正在使用以下内容:
response.setContentType("application/zip");
response.addHeader("Content-Disposition", "attachment; filename="+"sampleZip.zip");
response.setContentLength(2048);
response.setHeader("Set-Cookie", "fileDownload=true; path=/");
FileInputStream fileInputStream = new FileInputStream("sample.zip");
OutputStream responseOutputStream = response.getOutputStream();
int bytes;
while ((bytes = fileInputStream.read()) != -1) {
responseOutputStream.write(bytes);
}
response.flushBuffer();
现在它在我的浏览器默认下载位置下载zip文件。但是当我打开它显示的zip文件时
无法打开文件:它似乎不是有效存档
请帮我解决这个问题。
答案 0 :(得分:3)
这段代码看起来不错。但是您设置的默认内容长度可能是个问题。创建File实例并使用file.length()方法设置内容长度ans为输入流使用相同的文件。同时逐字节读取也不是一个好主意。如果可能,使用apache的IOUtils.copy()将数据从输入流复制到ServletOutputStream。