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 @   景、  阅读(686)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示