1. 程式人生 > >Java後臺實現檔案下載功能

Java後臺實現檔案下載功能

專案中使用的框架是SpringMVC+MyBatis
在專案中需要做一個功能。就是一個報表。然後根據報表生成一個csv格式的檔案。然後進行壓縮。並提供下載功能。
這裡寫圖片描述

該“Excel下載” 功能的業務邏輯是當點選該按鈕。則需要把報表頁面上顯示的資料進行生成一個csv
格式的檔案。然後並進行下載

如何生成CSV(詳見開發中。。。。。。)
為此。
我實現檔案下載功能。

我們的順序是從前臺到後臺依次進入。
前臺的程式碼是:這裡寫圖片描述

這裡僅僅只是為Ecxel下載 提供一個點選事件而已。
注意:
這裡是沒有用Ajax一說來進行下載檔案的。我在百度裡看到人博友說。Ajax沒有提供IO流下載檔案的功能。所以大部分都是動態的新增一個Form表單。然後用表單進行自動提交[form.submit()]

。自動去後臺執行相應的程式碼。

那麼我們需要寫好我們的js點選事件。
這裡寫圖片描述

邏輯是:
1-先宣告一個Form表單
2-把需要帶入後臺傳引數的值 ,進行設定到input標籤裡的value值內。
3-然後[form.submit()]讓form表單自動提交。

接下來是後臺事件的處理。

首先
生成一個CSV檔案
以及並返回生成後該檔案的路徑。

String downloadPath = definedTitle(list,request);

下載檔案的程式碼是:

FileDownload(downloadPathfileName,response);

具體方法實現:這裡寫圖片描述

下載是可以下載。但是我覺得 是不是還可以再優化一下?

有想到Demo小例子的沒?樓下的可留郵箱。

修訂:2017-03-14 19:00

修訂原因:
檔案下載在
Google瀏覽器和IE瀏覽器8以上是可以正常下載。
問題Bug:
但在iE8 中出現下載不了。且前後臺不報錯。這就讓人很傷腦筋了。
引起的原因是:
  在IE8 中。form表單不能隱式提交(單純的動態宣告一個Form【如上】)。一定要顯示提交(append到頁面中)。
解決方案的思路:
1、在IE8 中。你要把Form表單顯示的顯示的HTML檔案中。
2、然後用JS的form表單自動提交事件
3、使用jquery 移除Form事件。(為什麼 要移除。因為你點選的次數越多次。則頁面上新增的也就越多。這樣在程式碼的整潔度上來說不可取。)
4、修復完成

程式碼如下:

前端:
這裡寫圖片描述

前端JS:
這裡寫圖片描述

後端:
無需更改。

效果圖:
這裡寫圖片描述