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);
    }
//下载实现
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("文件下载失败!");
        }
    }
}

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

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

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

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

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

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


版权声明:本文为Mou_O原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。