SpringBoot+thymeleaf实现模板文件下载

1.配置文件:
    pom.xml中添加依赖:
    <!-- thymeleaf模版 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    application.yml文件中添加要下载的模板文件存放地址

    
    添加读取配置的模板存放地址

2.前台代码
    <a href="javascript:downTemple()" style="color:#1c99ef;text-decoration:underline;">下载模板</a>

  function downTemple(){
       window.location.href="/UserController/downTemple";
   }
3.后台代码
     @RequestMapping(value = "/downTemple")
    public String downTemple(HttpServletResponse response, RedirectAttributes redirectAttributes) {
         String fileName = "用户信息模板.xlsx";// 设置文件名,根据业务需要替换成要下载的文件名
         if (fileName != null) {
             //设置文件路径
             String realPath = configProperties.getExcelTemplateDpwloadPath();//这里使用配置类配置文件路径
             File file = new File(realPath , fileName);
             if (file.exists()) {
                 try {
                    response.setContentType("application/force-download");// 设置强制下载不打开
                    fileName =java.net.URLDecoder.decode(fileName,"UTF-8");
                    response.addHeader("Content-Disposition", "attachment;fileName=" +  new String(fileName.getBytes("GB2312"),"iso8859-1"));// 设置文件名 中文要编码后才可以
                 } catch (UnsupportedEncodingException e1) {
                    // TODO 自动生成的 catch 块
                    e1.printStackTrace();
                 }
                
                 byte[] buffer = new byte[1024];
                 FileInputStream fis = null;
                 BufferedInputStream bis = null;
                 try {
                     fis = new FileInputStream(file);
                     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 (Exception e) {
                     e.printStackTrace();
                 } finally {
                     if (bis != null) {
                         try {
                             bis.close();
                         } catch (IOException e) {
                             e.printStackTrace();
                         }
                     }
                     if (fis != null) {
                         try {
                             fis.close();
                         } catch (IOException e) {
                             e.printStackTrace();
                         }
                     }
                 }
             }
         }
        return null;
    }

 

posted @ 2021-07-16 15:29  景、  阅读(663)  评论(0编辑  收藏  举报