Java小白翻身-基于SpringBoot的文件下载系统 3

简介: Java小白翻身-基于SpringBoot的文件下载系统 3

这一节的目的是实现文件的打包下载。

有了Hutool,感觉轻松多了呢!

我们还是要导入Hutool,帮我们省去文件操作的麻烦。

修改页面

21.png

<ul>
      <li th:each="file:${files}">
          [[${file.getName()}]]
          <a th:href="@{'download?file='+${file.getName()}}">
              打包下载
          </a>
      </li>
  </ul>

和之前不同,这边不用th:text了,然后在每个文件旁边加一个打包下载的超链接。

在IndexController中添加一个新的方法

@RequestMapping("/download")
@ResponseBody
public void index(String file){
    String targetName = diskpath + File.separator + file;
    //打包到当前目录
    ZipUtil.zip(targetName);
}


ZipUtil是Hutool提供的,我们直接拿来用即可。

重新写download方法,增加下载功能

@RequestMapping("/download")
@ResponseBody
public void download(String file, HttpServletResponse response) throws UnsupportedEncodingException, FileNotFoundException {
    String targetName = diskpath + File.separator + file;
    //打包到当前目录
    ZipUtil.zip(targetName);
    targetName = targetName+".zip";
    response.setContentType("application/force-download");
    //解决下载文件名中文不显示的问题
    String fileName = new String(file.getBytes("utf-8"),"ISO8859-1");
    response.addHeader("Content-Disposition", "attachment;fileName=" + fileName + ".zip");
    //输出流,下载文件
    byte[] buffer = new byte[1024];
    try {
        FileInputStream fis = new FileInputStream(targetName);
        BufferedInputStream bis = new BufferedInputStream(fis);
        OutputStream os = response.getOutputStream();
        int i = bis.read(buffer);
        while (i != -1) {
            os.write(buffer, 0, i);
            i = bis.read(buffer);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}


如何下载完毕后就删掉zip文件

很简单,在下载完毕后,立刻调用删除的方法即可。注意,删文件之前,一定要关闭流!

核心代码如下:

//输出流,下载文件
byte[] buffer = new byte[1024];
try {
    FileInputStream fis = new FileInputStream(targetName);
    BufferedInputStream bis = new BufferedInputStream(fis);
    OutputStream os = response.getOutputStream();
    int i = bis.read(buffer);
    while (i != -1) {
        os.write(buffer, 0, i);
        i = bis.read(buffer);
    }
    //关闭流
    fis.close();
    os.close();
    boolean del = FileUtil.del(targetName);
    System.out.println(del);
} catch (IOException e) {
    e.printStackTrace();
}


因为本项目非常简单,如果感兴趣地话,个人建议大家自己动手练一练。(毕竟也没多少行代码)

所以,这边就不提供完整项目了。

22.png


比如我点击第二个打包下载。

23.png


就真的下载下来了。

24.png

而且,压缩包是自动删掉的。

相关文章
|
13天前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。
|
5天前
|
JavaScript 安全 Java
基于springboot的宠物领养系统
本系统基于Spring Boot、Java、Vue与MySQL技术,构建高效、安全的宠物领养平台,实现信息集中管理、智能匹配与数据保护,提升领养效率,推动“以领养代替购买”的文明理念。
|
15天前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
15天前
|
JavaScript Java 关系型数据库
基于springboot的古树名木保护管理系统
本研究针对古树保护面临的严峻挑战,构建基于Java、Vue、MySQL与Spring Boot技术的信息化管理系统,实现古树资源的动态监测、数据管理与科学保护,推动生态、文化与经济可持续发展。
|
6天前
|
监控 安全 JavaScript
2025基于springboot的校车预定全流程管理系统
针对传统校车管理效率低、信息不透明等问题,本研究设计并实现了一套校车预定全流程管理系统。系统采用Spring Boot、Java、Vue和MySQL等技术,实现校车信息管理、在线预定、实时监控等功能,提升学校管理效率,保障学生出行安全,推动教育信息化发展。
|
7天前
|
JavaScript Java 关系型数据库
基于springboot的高校运动会系统
本系统基于Spring Boot、Vue与MySQL,实现高校运动会报名、赛程安排及成绩管理的全流程信息化,提升组织效率,杜绝信息错漏与冒名顶替,推动体育赛事智能化发展。
|
22天前
|
人工智能 Java 关系型数据库
基于springboot的画品交流系统
本项目构建基于Java+Vue+SpringBoot+MySQL的画品交流系统,旨在解决传统艺术交易信息不透明、流通受限等问题,融合区块链与AI技术,实现画品展示、交易、鉴赏与社交一体化,推动艺术数字化转型与文化传播。
|
4天前
|
JavaScript 安全 Java
基于springboot的大学生兼职系统
本课题针对大学生兼职信息不对称、权益难保障等问题,研究基于Spring Boot、Vue、MySQL等技术的兼职系统,旨在构建安全、高效、功能完善的平台,提升大学生就业竞争力与兼职质量。
|
7天前
|
JavaScript Java 关系型数据库
基于springboot的美食城服务管理系统
本系统基于Spring Boot、Java、Vue和MySQL技术,构建集消费者服务、商家管理与后台监管于一体的美食城综合管理平台,提升运营效率与用户体验。
|
8天前
|
Java 关系型数据库 MySQL
基于springboot的网咖网吧管理系统
本文探讨了基于Java、MySQL和SpringBoot的网吧管理系统的设计与实现。随着信息化发展,传统管理方式难以满足需求,而该系统通过先进技术提升管理效率、保障数据安全、降低运营成本,具有重要意义。