文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JavaWeb项目中怎么实现一个文件压缩下载功能

2023-05-31 08:33

关注

本篇文章给大家分享的是有关JavaWeb项目中怎么实现一个文件压缩下载功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

实现思路有两种:

一是将所有文件先打包压缩为一个文件,然后下载这个压缩包,

二是一边压缩一边下载,将多个文件逐一写入到压缩文件中。

代码实现:

FileBean

public class FileBean implements Serializable {   private Integer fileId;// 主键   private String filePath;// 文件保存路径   private String fileName;// 文件保存名称   public FileBean() {   }   public Integer getFileId() {     return fileId;   }   public void setFileId(Integer fileId) {     this.fileId = fileId;   }   public String getFilePath() {     return filePath;   }   public void setFilePath(String filePath) {     this.filePath = filePath;   }   public String getFileName() {     return fileName;   }   public void setFileName(String fileName) {     this.fileName = fileName;   } }

控制层:

@RequestMapping(value = "/download", method = RequestMethod.GET)   public String download(String id, HttpServletRequest request,       HttpServletResponse response) throws IOException {     String str = "";     if (id != null && id.length() != 0) {       int index = id.indexOf("=");       str = id.substring(index + 1);       String[] ids = str.split(",");       ArrayList<FileBean> fileList = new ArrayList<FileBean>();       for (int i = 0; i < ids.length; i++) {// 根据id查找genericFileUpload,得到文件路径以及文件名         GenericFileUpload genericFileUpload = new GenericFileUpload();         genericFileUpload = genericFileUploadService.find(Long.parseLong(ids[i]));         FileBean file = new FileBean();         file.setFileName(genericFileUpload.getFileName());         file.setFilePath(genericFileUpload.getFilePath());         fileList.add(file);       }       //设置压缩包的名字       //解决不同浏览器压缩包名字含有中文时乱码的问题       String zipName = "download.zip";       response.setContentType("APPLICATION/OCTET-STREAM");       response.setHeader("Content-Disposition", "attachment; filename="+ zipName);       //设置压缩流:直接写入response,实现边压缩边下载       ZipOutputStream zipos =null;       try{         zipos=new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));         zipos.setMethod(ZipOutputStream.DEFLATED);//设置压缩方法        }catch(Exception e){         e.printStackTrace();       }       DataOutputStream os=null;       //循环将文件写入压缩流       for(int i=0;i<fileList.size();i++){         String filePath=fileList.get(i).getFilePath();         String fileName=fileList.get(i).getFileName();         File file=new File(filePath+"/"+fileName);//要下载文件的路径         try{           //添加ZipEntry,并ZipEntry中写入文件流           //这里,加上i是防止要下载的文件有重名的导致下载失败           zipos.putNextEntry(new ZipEntry(i+fileName));           os=new DataOutputStream(zipos);           InputStream is=new FileInputStream(file);           byte[] b = new byte[100];           int length = 0;           while((length = is.read(b))!= -1){             os.write(b, 0, length);           }           is.close();           zipos.closeEntry();         }catch(Exception e){           e.printStackTrace();         }       }        //关闭流       try {         os.flush();         os.close();         zipos.close();       } catch (IOException e) {         e.printStackTrace();       }           }     return "redirect:list.jhtml";   }

以上就是JavaWeb项目中怎么实现一个文件压缩下载功能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯