【发布时间】:2012-03-06 22:54:30
【问题描述】:
这是我用来创建 zip 文件的代码:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream out = new ZipOutputStream(baos);
try {
for(int i=0; i<docId.length; i++){
BoxDotComDocumentManager docman = new BoxDotComDocumentManager();
Document d = docman.get(docId[i]);
ZipEntry entry = new ZipEntry(d.getFileName());
entry.setSize(d.getFileBytes().length);
out.putNextEntry(entry);
out.write(d.getFileBytes());
resp.setContentType("application/zip");
resp.setHeader("Content-Disposition", "attachment; filename="+ "zipdemo.zip");
out.closeEntry();
}
} catch (Exception e) {
System.out.println("E = " + e);
}
try {
resp.getOutputStream().write(baos.toByteArray());
resp.flushBuffer();
} catch (IOException e) {
e.printStackTrace();
}
finally {
baos.close();
out.close();
}
正在将 zip 文件返回到要下载的浏览器,但是当我尝试下载该文件时,我收到一条错误消息,指出由于 zip 文件无效,因此无法下载该文件。
Document 是一个对象,其中包含有关文件的所有信息,包括实际文件。
关于我做错了什么有什么想法吗?我已经尝试了很多这种排列,但它们似乎都不起作用。提前谢谢你。
基思
【问题讨论】:
-
一方面:当您遇到致命错误时,不要只打印堆栈跟踪。使请求失败。此外,不要抓住裸例外 - 这几乎总是错误的方法。哦,你为什么要在循环的每次迭代中设置标题?
-
Jon - 只是试着让一个快乐的线索工作,然后我会正确处理所有的异常,与标题相同;将它们放在循环中或外部不会改变错误。他们将被移出循环。
-
但这让你很容易错过异常。 IMO,值得首先正确处理异常,这样你就可以知道你什么时候真正走上了幸福的道路......
-
感谢您的反馈;知道为什么这不起作用吗?我知道异常处理不正确,但这不会影响该文件的正确创建和下载。
标签: java memory download zip zipoutputstream