[Javascript] Ajax請求Spring中導出poi生成的Excel問題
關鍵字
poi
excel
ajax
get
ResponseEntity
背景信息/現象/問題
通過poi生成excel,在controller層返回
ResponseEntity<byte[]>
類型的二進制文件,但是ajax不能獲取,因爲ajax接受的是字符串.
根本原因
因爲導出excel,實際上是文件下載,後臺需要往前端(瀏覽器)寫文件流的。而Ajax請求獲取數據都是“字符串”,整個交互傳輸用的都是字符串數據,它沒法解析後臺返回的文件流,但瀏覽器可以
也就是說ajax通過我背景信息中的方法從更上是不能導出excel的
解決方法
- poi生成excel文件到服務器某個具體文件夾,將地址給到ajax的result結果中,讓用戶自行點擊下載,也就是用get方法下載,而不是用ajax方法
- 直接通過get請求訪問
新的問題
因爲這個項目採用了JWT + SpringSecurity的鑑權方法,每次通過ajax訪問時是在header中加了鑑權信息的,而百度後發現get請求是不能添加header信息的,所以用get請求訪問過去會被SpringSecurity攔截,我的臨時解決方案是:對應解決方法
- SpringSecurity對某一個地址不進行鑑權,可以直接訪問
- 在get請求中將鑑權信息通過參數的方式傳到controller層
- controller收到請求,不使用默認的方法(從header裏)解析出來用戶信息,而是新寫了個從參數中讀鑑權信息再鑑權
參考:
https://www.cnblogs.com/skytoangel/p/11276233.html