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`
在这里插入图片描述

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焚目圣僧渡众生

你的 一角将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值