poi匯出excel開啟檔案時部分內容有問題

2022-02-07 20:40:27 字數 1533 閱讀 9700

response.addheader("content-length", "" + outfile.length());

替換成:

response.setheader("content-length", "" + outfile.length());
addheader方法新增兩個完全一樣的資訊時,總是為響應增加新的頭部;

setheader()新增兩個完全一樣的資訊時,總是用新值去替換舊值;

response headers:

content-disposition: attachment;filename=專案設定-1592298665653.xlsx

content-length: 4909

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: 

參考文章1:

參考文章2:

我也不知道為啥了,big old 來捶我吧!

POI匯出Excel檔案

workbook workbook exportservice.exportfile request,student outputstream out null try catch ioexception e finally catch exception e 實現類 設定各列寬度 short st...

使用POI匯出excel檔案

fileoutputstream fileout new fileoutputstream workbook wb new hssfworkbook 建議使用介面來宣告變數 面向介面思想,可以方便使用介面的不同實現 wb.write fileout 寫入檔案 fileout.close sheet ...

使用poi匯出excel檔案

1.匯入依賴 org.apache.poigroupid poiartifactid 4.1.2version dependency 2.獲取匯出資料 list data 資料 3.設定匯出元件 hssfworkbook workbook newhssfworkbook hssfsheet shee...