下载excel模板为空记录
记录一次开发下载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模板为空记录相关推荐
- Spring Boot下载Excel模板,内容乱码解决方法
昨天说了下载excel模板是空的问题以及解决方案,今天突然想起来在本地开发时遇到的一个小坑(其实还是自己见识的太少而已),问题是这样的: 在开发阶段,将excel模板放到项目中,然后读取下载,发现下载 ...
- Java下载Excel模板文件的实现
在项目中经常会用到文件下载的功能,比如下载excel模板,这里简单记录一下实现过程 1.将模板文件放到项目资源文件目录中,也可以自定义其他位置,只要通过路径能找到该文件就行: 2.controller ...
- vue实现下载EXCEL模板、导入EXCEL文件
vue实现下载EXCEL模板.导入EXCEL文件 在项目中很常见需要先下载模板,根据模板导入 下面展示一些 下载模板代码片段. 需要有一个下载模板的接口,点击下载触发函数,调用接口,返回下载地址 接口 ...
- vue下载excel模板文件,excel读取
一.下载excel模板文件 <template><a-button type="primary" @click="downloadExcel" ...
- springmvc下载excel模板示例代码
以下是通过springmvc下载项目中的excel模板文件示例代码: @ApiOperation("下载excel模板")@RequestMapping(value = " ...
- Java用于下载Excel模板的接口(小白篇)
下载Excel模板的接口(最无脑的小白篇) try {//获取要下载的模板名称String fileName = "TemplateDate.xlsx";//设置头文件respon ...
- Java Web下载Excel模板
在java web项目中常常会遇到下载本地模板的要求,这里以下载Excel模板为例进行说明. 一.首先要在自己的项目下存放一个Excel文件,如图: 这个文件的存放位置不是固定的,我们可以通过获取真实 ...
- java 导入excel表格(批量导入),下载excel模板,导出表格
1.导入excel表格(批量导入) 如图,给id=83和id=84的老师导入工作时间. 导入的excel模板如下 注意导入excel表格时关于日期时间类的的数据要设置对应的格式. 后台接口 /*** ...
- Java从服务端下载Excel模板文件
方法一 (2021年01月更新) 生成excel模板 @RequestMapping("/downloadExcel")public void downloadExcel(Http ...
最新文章
- boost::geometry模块多边形叠加示例
- SAS的数组array介绍
- [html] HTML5中的article和section有什么区别?
- Javascript 创建书签小工具 (bilibili视频下载为例)
- linux温故知新十
- winform自定义消息提示框定时自动关闭
- 【论文笔记】A Convolutional Neural Network Cascade for Face Detection
- [USACO18DEC]The Cow Gathering
- Java进阶之路——从初级程序员到架构师,从小工到专家
- BI系统打包Docker镜像及容器化部署的具体实现
- html中引入的图标库,动态引入阿里图标库
- 了解CV和RoboMaster视觉组(五)滤波器、观测器和预测方法:维纳滤波器Wiener Filter,LMS
- 牛客 检测命令是否正确
- PS用套索工具抠图,并修改背景颜色
- 苹果自带浏览器显示无法连接服务器,为什么苹果自带浏览器无法连接到服务器怎么解决...
- Uiuc计算机博士面试时间,学霸分享:UIUC生物博士onsite面试经验
- Redis 取消保护模式
- HyperLynx(八)带状线串扰的仿真
- 从档案信息管理到档案知识管理
- Day629.思考题解答① -Java业务开发常见错误
热门文章
- n76e885_N76E885AT20_(NUVOTON(新唐))N76E885AT20中文资料_价格_PDF手册-立创电子商城
- 华容道解法程序2.0发布了(VC版本)
- C语言-单词分析解析
- Nexus 刷机教程
- Chrome好用的插件推荐
- 图书管理系统(2022暑期)
- 2021前端面经-看这篇就够了(笔者靠这个拿到阿里和字节的offer)
- 新浪云Sina App Engine
- 《深入浅出DPDK》《DPDK应用基础》读书笔记
- 如何清理卸下应用的残余文件_怎么清理CorelDRAW卸载残余文件