前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java小白翻身-基于SpringBoot的文件下载系统 3

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

作者头像
剽悍一小兔
发布2021-07-14 16:42:05
5500
发布2021-07-14 16:42:05
举报
文章被收录于专栏:web编程技术分享

这一节的目的是实现文件的打包下载。 有了Hutool,感觉轻松多了呢! 我们还是要导入Hutool,帮我们省去文件操作的麻烦。

修改页面

image

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

  </ul>

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

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

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

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

代码语言:javascript
复制
@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文件

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

核心代码如下:

代码语言:javascript
复制
//输出流,下载文件
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();
}

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

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

image

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

image

就真的下载下来了。

image

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 修改页面
  • 重新写download方法,增加下载功能
  • 如何下载完毕后就删掉zip文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档