项目场景:

在编写后台信息excle导入功能,需要先提供excle模板下载功能


问题描述:

在编写excle模板下载功能时,遇到以下问题:

  1. Failed to read zip entry source
  2. 导出excle模板名称乱码
  3. 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模板问题记录相关推荐

  1. Java下载excel模板

    接上篇 -- "下载功能"实现 Excel模板数据导入 参考 上一篇 : Java实现Excel模板导入 正文: 一.接口层: /*** 下载** @param res respo ...

  2. Java下载Excel模板文件的实现

    在项目中经常会用到文件下载的功能,比如下载excel模板,这里简单记录一下实现过程 1.将模板文件放到项目资源文件目录中,也可以自定义其他位置,只要通过路径能找到该文件就行: 2.controller ...

  3. Java 下载 Excel模板时,报修正 Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?如果信任此工作簿的来源,请点击是

    代码如下: /*** 下载导入应用模板** @return*/@ResponseBody@RequestMapping(method = RequestMethod.GET)public Respon ...

  4. java下载excel模板-SpringBoot版本

    excel文件放在Resource下面 @PostMapping("/downloadAddCardFtl")@OperateLog(module = Module.CARD, m ...

  5. java 下载文件模板

    后台框架:SSM 只需在Controller中写方法 @Controller @RequestMapping("template") public class TemplateCo ...

  6. Java从服务端下载Excel模板文件

    方法一 (2021年01月更新) 生成excel模板 @RequestMapping("/downloadExcel")public void downloadExcel(Http ...

  7. java根据Freemarker模板渲染出Excel文件并在浏览器中下载

    **java根据Freemarker模板渲染出Excel文件并在浏览器中下载** 准备工作 1.导入的依赖 2.创建模板 Freemrker语法大全: [Freemarker语法使用请点击该链接跳转学 ...

  8. JAVA 利用poi EXCLE模板文档导出数据

    JAVA 利用poi EXCLE模板文档导出数据 1.导入jar包 下载地址:添加链接描述 提取码:xqkg 2.EXCLE模板 3.代码示例 package utill;import java.io ...

  9. Java:Excel模板下载

    使用场景 Java下载预设的excel模板. 处理思路 1.配置文件模板路径:project-web.xml <entry key="file.templetPath"> ...

最新文章

  1. 30岁自学python找工作-30岁新手入门python!尝试人生另一种可能
  2. 最小生成树的Kruskal算法实现
  3. 固定收益证券(fixed income)
  4. ASP.NET2.0 ObjectDataSource的使用详解
  5. c语言 二维数组 文库,c语言二维数组练习题
  6. 如何动态改变Table Control的列抬头
  7. java画方块_[求助]用Swing就画一个方块代码出错了
  8. jdk基础之Object类getClass()方法
  9. codevs——1436 孪生素数 2
  10. 2021美赛什么时候出成绩?
  11. 20210726:FLAC刻录音乐CD教程05-总结
  12. 计算机网络-应用层和传输层协议分析实验(PacketTracer)
  13. 计算机网络学习笔记:基础知识
  14. 服务器硬盘掉线解决过程分析
  15. Windows——提高扩展显示屏的清晰度的一种方法
  16. 转贴一下 老婆日记
  17. 天天996,试用期4个月,被公司劝退!开发者太糟心了!
  18. 测开系列Selenium Webdriver Python(21)--元素定位2
  19. 卫星影像“红边”波段
  20. oracle 拼接clob,把string拼接成clob类型

热门文章

  1. 从共射极放大电路到选频放大电路到相位测距上的应用
  2. 记一次 python 截取高低位(>> 和 运算符)
  3. android实现截图功能
  4. 使用火车头采集器笔记
  5. 转载:香港实习生微软实习经验分享
  6. LLVM-clang
  7. java号码分身_电话号码分身问题
  8. 数据结构系列笔记——图
  9. 日语五十音图表 日语学习
  10. 云里黑白21——win10 企业版更新系统后开始菜单左键点不出来