java导出excel内容有问题_poi导出excel打开文件时部分内容有问题

问题描述:JavaWeb项目,ssm框架,从tomcat9.0.30换到weblogic10.3.6.0后,poi导出excel,打开文件时部分内容有问题;

解决:

response.addHeader("Content-Length", "" + outfile.length());

替换成:

response.setHeader("Content-Length", "" + outfile.length());

分析一:

addHeader方法添加两个完全一样的信息时,总是为响应增加新的头部;

setHeader()添加两个完全一样的信息时,总是用新值去替换旧值;

分析二:

我用F12看了我这个下载方法的响应头:

Response Headers:

Content-Disposition: attachment;filename=项目设置-1592298665653.xlsx

Content-Length: 4909

Content-Type: application/octet-stream

Date: Tue, 16 Jun 2020 09:11:05 GMT

Transfer-Encoding: chunked

在setHeader方法中,并没有最后标红的Transfer-Encoding: chunked,而在addHeader方法中是有这个方法的;

(这:我的response中并没有设置Transfer-Encoding这个字段,setHeader也只是覆盖了Content-Length,这是为什么。。。我tm太菜了嘛。。。)

分析三:

这次只能分析Transfer-Encoding: chunked了:

分块编码(Transfer-Encoding: chunked)

1、Transfer-Encoding,是一个 HTTP 头部字段(响应头域),字面意思是「传输编码」。最新的 HTTP 规范里,只定义了一种编码传输:分块编码(chunked)。

2、分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。

3、数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。

4、具体方法

a)在头部加入 Transfer-Encoding: chunked 之后,就代表这个报文采用了分块编码。这时,报文中的实体需要改为用一系列分块来传输。

b)每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的 CRLF(\r\n),也不包括分块数据结尾的 CRLF。

c)最后一个分块长度值必须为 0,对应的分块数据没有内容,表示实体结束。

big old: 看懂了吗?

me: 没有

big old: 呵呵(sb)

大概意思是说:这东西是http的数据传输机制,一块块的传,不用考虑发送内容的总大小;

me: 但是为什么生成的文件比不加Transfer-Encoding: chunked大了些,以至于打开文件时部分内容有问题(明明addHeader方法也设置了Content-Length)?

big old:

我也不知道为啥了,big old 来捶我吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值