记录一次开发下载excel模板记录

项目场景:

需求是下载excel导入模板

问题描述:

代码中模板位置:

代码是这样的:

//获取模板文件输入流
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(IntegralConstants.INTEGRAL_BATCH_ISSUE_TEMPLATE_PATH);
//下载文件
public static void download(HttpServletResponse response, InputStream inputStream, String filename) {OutputStream outputStream = null;try {setHeader(response, filename);outputStream = response.getOutputStream();byte[] buffer = new byte[inputStream.available()];inputStream.read(buffer);outputStream.write(buffer);} catch (Exception e) {log.error("download.error:{}", Throwables.getStackTraceAsString(e));} finally {try {inputStream.close();if (outputStream != null) {outputStream.flush();outputStream.close();}} catch (Exception ex) {log.error("download.close.error:{}", Throwables.getStackTraceAsString(ex));}}}
private static void setHeader(HttpServletResponse response, String fileName) throws UnsupportedEncodingException {response.reset();response.setHeader("content-type", "application/octet-stream");response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));response.setCharacterEncoding("utf-8");}

结果是本地下载文件格式错误,我找到target中的excel模板文件,发现打开也是文件损坏,这应该是文件打包时的问题,因为打为jar包时对resources资源文件进行了转码压缩。
于是在pom文件中添加了mavn插件,打包时跳过对xls和xlsx文件的转码压缩。

<!--编译跳过ecxel-->
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version><configuration><encoding>UTF-8</encoding><nonFilteredFileExtensions><nonFilteredFileExtension>xls</nonFilteredFileExtension><nonFilteredFileExtension>xlsx</nonFilteredFileExtension></nonFilteredFileExtensions></configuration>
</plugin>

这时候本地下载成功,但是部署到服务器,依旧下载的文件是损坏文件。

原因分析:

本地调试的时候读取的是正确完整的byte[]数据,可能开发环境上读取的不全或没有读取数据,查看了下源码:

解决方案:

于是尝试读取一部分就写一部分,写完为止,修改如下

public static void download(HttpServletResponse response, InputStream inputStream, String filename) {OutputStream outputStream = null;try {setHeader(response, filename);outputStream = response.getOutputStream();byte[] b = new byte[1024];int len;while ((len = inputStream.read(b)) > 0) {outputStream.write(b, 0, len);}//byte[] buffer = new byte[inputStream.available()];//inputStream.read(buffer);//outputStream.write(buffer);} catch (Exception e) {log.error("download.error:{}", Throwables.getStackTraceAsString(e));} finally {try {inputStream.close();if (outputStream != null) {outputStream.flush();outputStream.close();}} catch (Exception ex) {log.error("download.close.error:{}", Throwables.getStackTraceAsString(ex));}}}

再次部署,本地和开发环境下载的模板都完好;

下载excel模板为空记录相关推荐

  1. Spring Boot下载Excel模板,内容乱码解决方法

    昨天说了下载excel模板是空的问题以及解决方案,今天突然想起来在本地开发时遇到的一个小坑(其实还是自己见识的太少而已),问题是这样的: 在开发阶段,将excel模板放到项目中,然后读取下载,发现下载 ...

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

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

  3. vue实现下载EXCEL模板、导入EXCEL文件

    vue实现下载EXCEL模板.导入EXCEL文件 在项目中很常见需要先下载模板,根据模板导入 下面展示一些 下载模板代码片段. 需要有一个下载模板的接口,点击下载触发函数,调用接口,返回下载地址 接口 ...

  4. vue下载excel模板文件,excel读取

    一.下载excel模板文件 <template><a-button type="primary" @click="downloadExcel" ...

  5. springmvc下载excel模板示例代码

    以下是通过springmvc下载项目中的excel模板文件示例代码: @ApiOperation("下载excel模板")@RequestMapping(value = " ...

  6. Java用于下载Excel模板的接口(小白篇)

    下载Excel模板的接口(最无脑的小白篇) try {//获取要下载的模板名称String fileName = "TemplateDate.xlsx";//设置头文件respon ...

  7. Java Web下载Excel模板

    在java web项目中常常会遇到下载本地模板的要求,这里以下载Excel模板为例进行说明. 一.首先要在自己的项目下存放一个Excel文件,如图: 这个文件的存放位置不是固定的,我们可以通过获取真实 ...

  8. java 导入excel表格(批量导入),下载excel模板,导出表格

    1.导入excel表格(批量导入) 如图,给id=83和id=84的老师导入工作时间. 导入的excel模板如下 注意导入excel表格时关于日期时间类的的数据要设置对应的格式. 后台接口 /*** ...

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

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

最新文章

  1. boost::geometry模块多边形叠加示例
  2. SAS的数组array介绍
  3. [html] HTML5中的article和section有什么区别?
  4. Javascript 创建书签小工具 (bilibili视频下载为例)
  5. linux温故知新十
  6. winform自定义消息提示框定时自动关闭
  7. 【论文笔记】A Convolutional Neural Network Cascade for Face Detection
  8. [USACO18DEC]The Cow Gathering
  9. Java进阶之路——从初级程序员到架构师,从小工到专家
  10. BI系统打包Docker镜像及容器化部署的具体实现
  11. html中引入的图标库,动态引入阿里图标库
  12. 了解CV和RoboMaster视觉组(五)滤波器、观测器和预测方法:维纳滤波器Wiener Filter,LMS
  13. 牛客 检测命令是否正确
  14. PS用套索工具抠图,并修改背景颜色
  15. 苹果自带浏览器显示无法连接服务器,为什么苹果自带浏览器无法连接到服务器怎么解决...
  16. Uiuc计算机博士面试时间,学霸分享:UIUC生物博士onsite面试经验
  17. Redis 取消保护模式
  18. HyperLynx(八)带状线串扰的仿真
  19. 从档案信息管理到档案知识管理
  20. Day629.思考题解答① -Java业务开发常见错误

热门文章

  1. n76e885_N76E885AT20_(NUVOTON(新唐))N76E885AT20中文资料_价格_PDF手册-立创电子商城
  2. 华容道解法程序2.0发布了(VC版本)
  3. C语言-单词分析解析
  4. Nexus 刷机教程
  5. Chrome好用的插件推荐
  6. 图书管理系统(2022暑期)
  7. 2021前端面经-看这篇就够了(笔者靠这个拿到阿里和字节的offer)
  8. 新浪云Sina App Engine
  9. 《深入浅出DPDK》《DPDK应用基础》读书笔记
  10. 如何清理卸下应用的残余文件_怎么清理CorelDRAW卸载残余文件