Java 下载excle模板问题记录
项目场景:
在编写后台信息excle导入功能,需要先提供excle模板下载功能
问题描述:
在编写excle模板下载功能时,遇到以下问题:
- Failed to read zip entry source
- 导出excle模板名称乱码
- No converter for with preset Content-Type ‘multipart/form-data’
原因分析及解决方案:
第一个问题
查看错误日志,提示IOException异常,excel模板在项目打包编译时,xlsx文件解压缩时出问题;
去target目录下查看,excel打不开,提示文件损坏
解决办法:在pom文件中加入以下配置即可避免此问题
<plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version></plugin><!-- 过滤后缀文件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><configuration><nonFilteredFileExtensions><nonFilteredFileExtension>xlsx</nonFilteredFileExtension><nonFilteredFileExtension>xls</nonFilteredFileExtension></nonFilteredFileExtensions></configuration></plugin>
</plugins>
第二个问题
没有指定编码格式,或浏览器原因
解决办法:代码中对文件名处理编码格式,request区分浏览器
String fileName = "导入模板.xlsx";
String agent = request.getHeader("USER-AGENT").toLowerCase();
if (agent.contains("firefox")) {response.reset();response.setContentType("application/vnd.ms-excel;charset=UTF-8");response.setHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes(), "ISO8859-1"));
} else {fileName = URLEncoder.encode(fileName, "UTF-8");response.reset();// ContentType 可以不设置response.setContentType("application/vnd.ms-excel;charset=UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
}
第三个问题
下载模板成功,但是后台一直报错java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
[response被提交后不能调用sendError()]
输出流关闭之后调用return导致的这个错误
@RequestMapping(value = "/downloadExcel")
public ApiResult downloadExcel(HttpServletRequest request, HttpServletResponse response) {// 模板位置OutputStream os = null;try (InputStream bis = Thread.currentThread().getContextClassLoader().getResourceAsStream("statics/js/modules/excelTemplate/distributorTemp.xlsx")) {String fileName = "导入模板.xlsx";String agent = request.getHeader("USER-AGENT").toLowerCase();if (agent.contains("firefox")) {response.reset();response.setContentType("application/vnd.ms-excel;charset=UTF-8");response.setHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes(), "ISO8859-1"));} else {fileName = URLEncoder.encode(fileName, "UTF-8");response.reset();// ContentType 可以不设置response.setContentType("application/vnd.ms-excel;charset=UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + fileName);}// 读取excel模板XSSFWorkbook wb = new XSSFWorkbook(bis);os = new BufferedOutputStream(response.getOutputStream());wb.write(os);os.flush();os.close();} catch (IOException e) {e.printStackTrace();return ApiResult.error("下载模板出错:" + e);} finally {if (os != null) {try {os.close();} catch (IOException e) {e.printStackTrace();}}}return ApiResult.ok();
}
解决方法:将返回值改为void或者return null
创作不易,关注、点赞就是对作者最大的鼓励,欢迎在下方评论留言
欢迎关注微信公众号:键指JAVA,定期分享Java知识,一起学习,共同成长。
Java 下载excle模板问题记录相关推荐
- Java下载excel模板
接上篇 -- "下载功能"实现 Excel模板数据导入 参考 上一篇 : Java实现Excel模板导入 正文: 一.接口层: /*** 下载** @param res respo ...
- Java下载Excel模板文件的实现
在项目中经常会用到文件下载的功能,比如下载excel模板,这里简单记录一下实现过程 1.将模板文件放到项目资源文件目录中,也可以自定义其他位置,只要通过路径能找到该文件就行: 2.controller ...
- Java 下载 Excel模板时,报修正 Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?如果信任此工作簿的来源,请点击是
代码如下: /*** 下载导入应用模板** @return*/@ResponseBody@RequestMapping(method = RequestMethod.GET)public Respon ...
- java下载excel模板-SpringBoot版本
excel文件放在Resource下面 @PostMapping("/downloadAddCardFtl")@OperateLog(module = Module.CARD, m ...
- java 下载文件模板
后台框架:SSM 只需在Controller中写方法 @Controller @RequestMapping("template") public class TemplateCo ...
- Java从服务端下载Excel模板文件
方法一 (2021年01月更新) 生成excel模板 @RequestMapping("/downloadExcel")public void downloadExcel(Http ...
- java根据Freemarker模板渲染出Excel文件并在浏览器中下载
**java根据Freemarker模板渲染出Excel文件并在浏览器中下载** 准备工作 1.导入的依赖 2.创建模板 Freemrker语法大全: [Freemarker语法使用请点击该链接跳转学 ...
- JAVA 利用poi EXCLE模板文档导出数据
JAVA 利用poi EXCLE模板文档导出数据 1.导入jar包 下载地址:添加链接描述 提取码:xqkg 2.EXCLE模板 3.代码示例 package utill;import java.io ...
- Java:Excel模板下载
使用场景 Java下载预设的excel模板. 处理思路 1.配置文件模板路径:project-web.xml <entry key="file.templetPath"> ...
最新文章
- 30岁自学python找工作-30岁新手入门python!尝试人生另一种可能
- 最小生成树的Kruskal算法实现
- 固定收益证券(fixed income)
- ASP.NET2.0 ObjectDataSource的使用详解
- c语言 二维数组 文库,c语言二维数组练习题
- 如何动态改变Table Control的列抬头
- java画方块_[求助]用Swing就画一个方块代码出错了
- jdk基础之Object类getClass()方法
- codevs——1436 孪生素数 2
- 2021美赛什么时候出成绩?
- 20210726:FLAC刻录音乐CD教程05-总结
- 计算机网络-应用层和传输层协议分析实验(PacketTracer)
- 计算机网络学习笔记:基础知识
- 服务器硬盘掉线解决过程分析
- Windows——提高扩展显示屏的清晰度的一种方法
- 转贴一下 老婆日记
- 天天996,试用期4个月,被公司劝退!开发者太糟心了!
- 测开系列Selenium Webdriver Python(21)--元素定位2
- 卫星影像“红边”波段
- oracle 拼接clob,把string拼接成clob类型