• Java 中模板下载


    Java中导入,导出带图片的数据及模板下载

    模板下载

    首先先整理好需要下载的模板,这里用的excel,也可以用world,自定义格式,下面是整理好的模板样式截图:
    模板
    将整理好的模板放入Resources下新建的包中,位置截图:
    在这里插入图片描述
    接下来就是进行模板下载编码及可能遇到的问题记录:
    1.下面将接口及实现的代码贴上:

    //接口
    @GetMapping("/dowmload/model")
        @ApiOperation(value = "model模板下载")
        public void dowmloadRoadsAndBridgesModel(HttpServletRequest request, HttpServletResponse response){
            String filename = "model.xlsx";
            DownloadExcelUtil.downAchievementTemplate(request, response, filename);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    //下载实现
    import com.goktech.common.core.exception.ServiceException;
    import lombok.extern.slf4j.Slf4j;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.InputStream;
    import java.net.URLEncoder;
    
    /**
     * @ClassName: DownloadExcelUtil
     * @Description: 文件下载
     **/
    @Slf4j
    public class DownloadExcelUtil {
    
        private static final String filesPath = "excelmodel/";
    
        /**
         * @description: Resource中文件模板下载
         * @param: [request, response, fileName]
         **/
        public static void downAchievementTemplate(HttpServletRequest request,
                                                   HttpServletResponse response,
                                                   String fileName){
            ServletOutputStream out;
            response.setContentType("multipart/form-data");
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html");
            try {
                InputStream inputStream = DownloadExcelUtil.class.getClassLoader().getResourceAsStream(filesPath + fileName);
                String userAgent = request.getHeader("User-Agent");
                if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
                    fileName = URLEncoder.encode(fileName, "UTF-8");
                } else {
                    // 非IE浏览器的处理:
                    fileName = new String((fileName).getBytes("UTF-8"), "ISO-8859-1");
                }
                response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
                out = response.getOutputStream();
                int b = 0;
                byte[] buffer = new byte[1024];
                while ((b = inputStream.read(buffer)) != -1) {
                    // 4.写到输出流(out)中
                    out.write(buffer, 0, b);
                }
                inputStream.close();
                if (out != null) {
                    out.flush();
                    out.close();
                }
            } catch (Exception e) {
                log.error("文件下载失败,异常:{}", e.getMessage());
                throw new ServiceException("文件下载失败!");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    2.记录这里遇到的问题,在其他地方看到的很多都是使用:

    String filePath = DownloadExcelUtil.class.getClassLoader().getResource(filesPath + fileName).getPath();//文件在项目中的存放路径
    
    • 1

    这种.getResource()的方式获取文件路径地址,我们这里使用的是.getResourceAsStream()获取的流,这里有什么问题呢?
    前者获取的是根路径,后者获取的是文件的流,当我们使用前者的时候,在本地测试完全没有问题,当发布到线上使用的时候,就会出现如下异常:
    在这里插入图片描述
    当使用后者就可以解决这个文件找不到的问题,至于前者后者的区别,大家可以查看关于使用this.getClass().getResource(“/“)获取文件时遇到的坑_ClassPathResource加载资源文件用法

    Java导入带图片的excel内容,可查看文章:Java带图片的excel数据导入
    Java中将带图片的数据导出到excel,可查看文章:Java中带图片的数据导出到excel

    死鬼~看完了来个三连哦!O.O`
    在这里插入图片描述

    反手就是一个赞赞赞——————————奥里给

  • 相关阅读:
    springboot和spring对比
    02 Java虚拟机的结构
    用户增长模型:3A3R策略模型
    arthas诊断工具
    基于IDEA 工程项目的git实操
    搜狗反链量查询易语言代码
    uniapp微信登录
    C语言c89(c90)的所有的32个关键字分类
    “因为无法从捐赠中抽成,谷歌把我的开源 App 下架了!”
    LeetCode_二分搜索_容斥原理_困难_878.第 N 个神奇数字
  • 原文地址:https://blog.csdn.net/Mou_O/article/details/126764448