通过HttpResponse Java下载Zip文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了通过HttpResponse Java下载Zip文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2106字,纯文字阅读大概需要4分钟。
内容图文
所以我从一个数据库(各种mimetypes)抓取一个blob集合,并试图将它们压缩起来,由用户通过http响应下载.我可以进行下载,但是当我尝试打开下载的zip文件时,它说“存档格式未知或已损坏”.我已经尝试了以下代码与application / zip,application / octet-stream和application / x-zip-compressed,但我开始假设问题在于我如何添加文件.我也使用Java 7和Grails 2.2.4.
任何有关这方面的帮助将不胜感激.谢谢!
final ZipOutputStream out = new ZipOutputStream(new FileOutputStream("test.zip"));
for (Long id : ids){
Object[] stream = inlineSamplesDataProvider.getAttachmentStream(id);
if (stream) {
String fileName = stream[0]
String mimeType = (String) stream[1];
InputStream inputStream = stream[2]
byte[] byteStream = inputStream.getBytes();
ZipEntry zipEntry = new ZipEntry(fileName)
out.putNextEntry(zipEntry);
out.write(byteStream, 0, byteStream.length);
out.closeEntry();
}
}
out.close();
response.setHeader("Content-Disposition", "attachment; filename=\"" + "test.zip" + "\"");
response.setHeader("Content-Type", "application/zip");
response.outputStream << out;
response.outputstream.flush();
解决方法:
我在这里找到了答案:Returning ZipOutputStream to browser
好吧,最终为我工作的是将ZipOutputStream转换为ByteArrayOutputStream并将其作为byte []写入响应:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
final ZipOutputStream out = new ZipOutputStream(baos);
Calendar cal = Calendar.getInstance();
String date = new SimpleDateFormat("MMM-dd").format(cal.getTime());
final String zipName = "COA_Images-" + date + ".zip";
for (Long id : ids){
Object[] stream = inlineSamplesDataProvider.getAttachmentStream(id);
if (stream) {
String fileName = stream[0]
String mimeType = (String) stream[1];
InputStream inputStream = stream[2];
byte[] byteStream = inputStream.getBytes();
ZipEntry zipEntry = new ZipEntry(fileName)
out.putNextEntry(zipEntry);
out.write(byteStream, 0, byteStream.length);
out.closeEntry();
}
}
out.close();
response.setHeader("Content-Disposition", "attachment; filename=\"" + zipName + "\"");
response.setHeader("Content-Type", "application/zip");
response.getOutputStream().write(baos.toByteArray());
response.flushBuffer();
baos.close();
感谢所有帮助过的人!
内容总结
以上是互联网集市为您收集整理的通过HttpResponse Java下载Zip文件全部内容,希望文章能够帮你解决通过HttpResponse Java下载Zip文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。