天天看點

Java小白翻身-基于SpringBoot的檔案下載下傳系統 3修改頁面重新寫download方法,增加下載下傳功能如何下載下傳完畢後就删掉zip檔案

這一節的目的是實作檔案的打包下載下傳。

有了Hutool,感覺輕松多了呢!

我們還是要導入Hutool,幫我們省去檔案操作的麻煩。

修改頁面

Java小白翻身-基于SpringBoot的檔案下載下傳系統 3修改頁面重新寫download方法,增加下載下傳功能如何下載下傳完畢後就删掉zip檔案
<ul>
      <li th:each="file:${files}">
          [[${file.getName()}]]
          <a th:href="@{'download?file='+${file.getName()}}" target="_blank" rel="external nofollow" >
              打包下載下傳
          </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();
}
           

因為本項目非常簡單,如果感興趣地話,個人建議大家自己動手練一練。(畢竟也沒多少行代碼)

是以,這邊就不提供完整項目了。

Java小白翻身-基于SpringBoot的檔案下載下傳系統 3修改頁面重新寫download方法,增加下載下傳功能如何下載下傳完畢後就删掉zip檔案

比如我點選第二個打包下載下傳。

Java小白翻身-基于SpringBoot的檔案下載下傳系統 3修改頁面重新寫download方法,增加下載下傳功能如何下載下傳完畢後就删掉zip檔案

就真的下載下傳下來了。

Java小白翻身-基于SpringBoot的檔案下載下傳系統 3修改頁面重新寫download方法,增加下載下傳功能如何下載下傳完畢後就删掉zip檔案

而且,壓縮包是自動删掉的。