Spring Cloud 下載Excel 的問題小結(亂碼和超時)

      公司的管理後臺有一個需求,可以根據頁面上的輸入篩選一些數據,然後下載成excel。面對一個這樣的需求,我覺得並不複雜,畢竟已經有封裝好的工具類了。在本地測試的時候,我發現自己在swagger上是可以看到生成的excel 的,保存到本地查看,裏面完全是亂碼的,:(  第一反應還是查看自己的編碼格式,除了文件名字用了iso8859-1之外,其他全部都是使用的utf-8格式,我覺得應該不會亂碼纔對。把編碼格式設置爲iso8859-1 再試試,問題依然存在。查看了別人的導出excel的代碼,發現通過swagger下載的文件還是亂碼。

       無奈之下,使用了Rest Client 試了試,居然成功的下載了文件,而且打開的時候是沒有亂碼的。要不用PostMan也試試,發現請求成功了,後端的日誌也都是正常的,但是並沒有看到有文件可以下載誒。查看了PostMan的使用方法,不能使用send 按鈕,應該使用Send and Download 按鈕,然後成功的下載了excel 文件,並且沒有亂碼。

      在真正和前端開發人員對接的時候,又出現了新的問題。 後端生成文檔速度太慢,系統的網關可能會超時。 想讓網關不超時其實也很簡單。第一、讓查詢儘可能的快,比如通過搜索引擎,而不是通過MYSQL和調用其他服務的接口; 第二、把下載文檔的接口寫成異步的,前端第一次只是觸發生成文檔,然後每1分鐘來輪詢一次,如果沒有生成,那麼前端繼續輪詢;如果已經生成了,就把文檔上傳到OSS,然後返回一個文檔的鏈接。  瞎眼可見的是,用第一種方法會更合理一些,但是考慮到實際的情況,我們使用了第二種: (  終於還是艱難的解決了這個小問題。

     總結:

       第一、在Swagger上生成excel亂碼不一定是代碼的問題,有可能是Swagger 的配置問題。

       第二、使用RestClinet 和PostMan 可以更好的支持測試restful 接口。

       第三、PostMan 下載附件應該使用Send and Download 按鈕,不是Send 按鈕。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章