springmvc中下載中文文件名稱為下劃線的解決方案
springmvc下載中文文件名稱為下劃線
springboot項(xiàng)目中,在下載文件的時(shí)候,通過封裝ResponseEntity,將文件流寫入body,這種下載文件的方式,造成了下載的文件名為正文顯示為下劃線的形式;
這個(gè)問題很好解決
直接將輸入的文件名的編碼格式定義成GBK格式;
如下代碼
public static ResponseEntity<FileSystemResource> export(File file) throws UnsupportedEncodingException { if (file == null) { return null; } //這個(gè)位置對(duì)文件名進(jìn)行編碼 String fileName = new String (file.getName().getBytes("GBK"),"ISO-8859-1"); HttpHeaders headers = new HttpHeaders(); headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); headers.add("Content-Disposition", "attachment; filename=" +fileName); headers.add("Pragma", "no-cache"); headers.add("Expires", "0"); headers.add("Last-Modified", new Date().toString()); headers.add("ETag", String.valueOf(System.currentTimeMillis())); return ResponseEntity .ok() .headers(headers) .contentLength(file.length()) .contentType(MediaType.parseMediaType("application/octet-stream")) .body(new FileSystemResource(file)); }
java生成文件名時(shí)漢字變?yōu)橄聞澗€?
public static void exportToExcel(String uid, String name, String htmlText,? HttpServletRequest request, HttpServletResponse response) { ? ? ? htmlText = htmlText.replaceFirst("<table>", "<tableFirst>"); ? ? ? htmlText = htmlText.replaceAll("<table>", ? ? ? ? ? ? "<table cellpadding=\"3\" cellspacing=\"0\" ?border=\"1\" rull=\"all\"? style=\"border-collapse: collapse\">"); ? ? ? htmlText = htmlText.replaceFirst("<tableFirst>", "<table>"); ? ? ? try (OutputStream out = response.getOutputStream()) { ? ? ? ? ?String fileName = name+ "_" + DateUtils.getNow("yyyyMMddHHmmss"); // ? ? ? fileName = new String(fileName.getBytes(),"utf-8")+ ".xls"; ? ? ? ? ?if ("large".equals(htmlText)) { ? ? ? ? ? ? ReportingPo report = reportingService.getByUid(uid); ? ? ? ? ? ? Map<String, Object> formParameters = generationService.getFormParameters(request.getParameterMap(),? report.getDataRange()); ? ? ? ? ? ? ReportTable reportTable = generationService.getReportTable(report, formParameters); ? ? ? ? ? ? htmlText = reportTable.getHtmlText(); ? ? ? ? ?} // ? ? ? response.reset(); ? ? ? ? ?response.addHeader("Content-Disposition", "attachment;filename=" + ?new String(fileName.getBytes("utf-8"),"iso-8859-1")+ ".xls"); // ? ? ? response.setHeader("Content-Disposition", String.format("attachment; filename=%s", fileName)); ? ? ? ? ?response.setContentType("application/vnd.ms-excel; charset=utf-8"); ? ? ? ? ?response.setCharacterEncoding("utf-8"); ? ? ? ? ?response.addCookie(new Cookie("fileDownload", "true")); // ? ? ? out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }); // 生成帶bom的utf8文件 ? ? ? ? ?out.write(htmlText.getBytes("utf-8")); ? ? ? ? ?out.flush(); ? ? ? } catch (Exception ex) { ? ? ? ? ?throw new RuntimeException(ex); ? ? ? } ? ?}
注意這里兩個(gè)編碼
new String(fileName.getBytes("utf-8"),"iso-8859-1")+ ".xls"
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java中BigDecimal進(jìn)行加減乘除的基本用法
大家應(yīng)該對(duì)于不需要任何準(zhǔn)確計(jì)算精度的數(shù)字可以直接使用float或double運(yùn)算,但是如果需要精確計(jì)算的結(jié)果,則必須使用BigDecimal類,而且使用BigDecimal類也可以進(jìn)行大數(shù)的操作。下面這篇文章就給大家介紹介紹關(guān)于java中BigDecimal進(jìn)行加減乘除的基本用法。2016-12-12spring boot 中設(shè)置默認(rèn)網(wǎng)頁的方法
這篇文章主要介紹了spring boot 中設(shè)置默認(rèn)網(wǎng)頁的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04Java 實(shí)戰(zhàn)項(xiàng)目之教材管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)教材管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11詳解Spring 攔截器流程及多個(gè)攔截器的執(zhí)行順序
這篇文章主要介紹了Spring 攔截器流程及多個(gè)攔截器的執(zhí)行順序的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Spring框架,感興趣的朋友可以了解下2021-05-05java中Socket設(shè)置超時(shí)時(shí)間的兩種方式
這篇文章主要介紹了java中Socket設(shè)置超時(shí)時(shí)間的兩種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11Spring Cloud Admin健康檢查 郵件、釘釘群通知的實(shí)現(xiàn)
這篇文章主要介紹了Spring Cloud Admin健康檢查 郵件、釘釘群通知的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08springmvc HttpServletRequest 如何獲取c:forEach的值
這篇文章主要介紹了springmvc HttpServletRequest 如何獲取c:forEach的值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08