springmvc 檔案下載中文檔名不顯示
阿新 • • 發佈:2019-02-09
獲得excel檔案流並下載的過程中,下載檔案中文名字是空白 (_ .xlsx )
@RequestMapping("/exportExcel") public void exportExcel(@RequestParam("token") String token,HttpServletResponse response){ try { String jsonStr = (String) redisTemplate.opsForHash().get(token, "ticketList"); List<LowFareFindTicketVO> list = JSON.parseArray(jsonStr, LowFareFindTicketVO.class); Workbook workbook = lowFareFindExcelService.writeExcelFile(list); String fileName = IdGenerator.getTimestamp()+ "_比較後結果.xlsx"; //fileName = URLEncoder.encode(fileName,"utf-8"); response.setHeader("Content-disposition","attachment; filename=" + fileName); response.setContentType("application/msexcel"); ServletOutputStream servletOut = response.getOutputStream(); workbook.write(servletOut); } catch (Exception e){ logger.error("#",e); } }
原因:header中只支援ASCII
解決辦法
在設定fileName的時候進行URL轉碼
fileName = URLEncoder.encode(fileName,"utf-8");
JS中解決URI 編碼問題:
encodeURI() 函式通過將特定字元的每個例項替換為一個、兩個、三或四轉義序列來對統一資源識別符號 (URI) 進行編碼 (該字元的 UTF-8 編碼僅為四轉義序列)由兩個 "代理" 字元組成)。
encodeURIComponent()是對統一資源識別符號(URI)的組成部分進行編碼的方法。它使用一到四個轉義序列來表示字串中的每個字元的UTF-8編碼(只有由兩個Unicode代理區字元組成的字元才用四個轉義字元編碼)。
引出:
為什麼要對URL進行編碼? 開啟