一個需求,用戶點擊下載按鈕,將指定的excel的報表模板使用數據庫數據渲染,然後下載到用戶本地;
通常而言,對於一個文件的下載,可以有以下幾種方式:
window.location.href=文件名稱URL全路徑;
window.open(文件名稱URL全路徑);
這種方式不友好的地方在於服務器的目錄結構直接暴露出去,而且在IE下很有可能會報錯權限問題等,甚至firefox中會觸發那個年代久遠而依然沒有解決的bug。所以這裏不推薦。
對於jxl生成excel文件,有兩種方式,一種是生成文件保存到磁盤,另一種是直接保存到輸出流中。
對於上述需求,如果生成的文件保存到磁盤,隨着系統運行,磁盤會主鍵被佔用,需要手動去刪除。由於文件都較小,所以這裏採用第二種方式,直接在內存中生成文件,然後提供給用戶下載的時候response回去。
看一個例子:
用於響應下載請求的controller
其中調用到的文件服務
其中的重點就在於
這句話指定了寫入的數據到輸出流中。
頁面調用很簡單