摘要:瀏覽器下載代碼如下通過循環(huán)將讀入的文件的內(nèi)容輸出到瀏覽器中如果文件名為中文,上面的代碼下載的文件名會(huì)亂碼。解決中文亂碼方法拿到瀏覽器請(qǐng)求的判斷是否包含,是則直接講文件名轉(zhuǎn)換為,否則使用轉(zhuǎn)換。
場(chǎng)景描述:
由于項(xiàng)目需求,需要支持瀏覽器下載文件,比如招聘網(wǎng)站的在線簡歷下載。 瀏覽器下載代碼如下:
public static void downloadFile(File file, HttpServletResponse response) { InputStream fin = null; ServletOutputStream out = null; try { fin = new FileInputStream(file); out = response.getOutputStream; response.setCharacterEncoding("utf-8"); response.setContentType("application/x-download"); response.addHeader("Content-Disposition", "attachment;filename=resume.doc"); byte[] buffer = new byte[1024]; int bytesToRead = -1; // 通過循環(huán)將讀入的Word文件的內(nèi)容輸出到瀏覽器中 while((bytesToRead = fin.read(buffer)) != -1) { out.write(buffer, 0, bytesToRead); } } catch (Exception e) { e.printStackTrace(); } finally { if(fin != null) fin.close(); if(out != null) out.close(); } }
如果文件名為中文,上面的代碼下載的文件名會(huì)亂碼。
解決中文亂碼方法:拿到瀏覽器請(qǐng)求的usreAgent,判斷是否包含MSIE,是則直接講文件名轉(zhuǎn)換為bytes,否則使用UTF-8轉(zhuǎn)換。 然后將bytes使用ISO-8859-1編碼轉(zhuǎn)換為字符串,返回到瀏覽器。代碼如下:
public class DownloadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // codes.. String name = "中文名 帶空格 的測(cè)試文件.txt"; String userAgent = request.getHeader("User-Agent"); // name.getBytes("UTF-8")處理safari的亂碼問題 byte[] bytes = userAgent.contains("MSIE") ? name.getBytes() : name.getBytes("UTF-8"); // 各瀏覽器基本都支持ISO編碼 name = new String(bytes, "ISO-8859-1"); // 文件名外的雙引號(hào)處理firefox的空格截?cái)鄦栴} response.setHeader("Content-disposition", String.format("attachment; filename="%s"", name)); // codes.. } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/70140.html
摘要:什么是對(duì)象響應(yīng)由狀態(tài)行實(shí)體內(nèi)容消息頭一個(gè)空行組成。為什么使用方法能夠正常向?yàn)g覽器輸出中文呢你好呀我是中國這句代碼在轉(zhuǎn)成數(shù)組的時(shí)候默認(rèn)查的是編碼,而你好呀我是中國支持編碼,所以可以正常顯示出來。 response、request對(duì)象 Tomcat收到客戶端的http請(qǐng)求,會(huì)針對(duì)每一次請(qǐng)求,分別創(chuàng)建一個(gè)代表請(qǐng)求的request對(duì)象、和代表響應(yīng)的response對(duì)象 既然request對(duì)象...
摘要:在項(xiàng)目中發(fā)現(xiàn),使用下載中文名文件的時(shí)候,下載的文件名是亂碼的問題。但是這個(gè)問題在,,中是沒有的。原先以為是的,但是細(xì)細(xì)研究之下你會(huì)發(fā)現(xiàn)這個(gè)簡單的文件下載問題在協(xié)議里經(jīng)歷了多少波折。 在項(xiàng)目中發(fā)現(xiàn),使用Safari下載中文名文件的時(shí)候,下載的文件名是亂碼的問題。但是這個(gè)問題在IE,F(xiàn)irefox,Chrome中是沒有的。原先以為是Safari的bug,但是細(xì)細(xì)研究之下你會(huì)發(fā)現(xiàn)這個(gè)簡單的文...
摘要:代碼量也的確減少很多也能夠獲取普通字段的參數(shù)上傳文件名的中文亂碼和上傳數(shù)據(jù)的中文亂碼我把文件名改成中文,就亂碼了表單提交過來的中文數(shù)據(jù)也亂碼了。 什么是文件上傳? 文件上傳就是把用戶的信息保存起來。 為什么需要文件上傳? 在用戶注冊(cè)的時(shí)候,可能需要用戶提交照片。那么這張照片就應(yīng)該要進(jìn)行保存。 上傳組件(工具) 為什么我們要使用上傳工具? 為啥我們需要上傳組件呢?當(dāng)我們要獲取客戶端的數(shù)據(jù)...
閱讀 1979·2021-11-22 15:33
閱讀 3011·2021-11-18 10:02
閱讀 2622·2021-11-08 13:16
閱讀 1634·2021-10-09 09:57
閱讀 1378·2021-09-30 09:47
閱讀 2013·2019-08-29 13:05
閱讀 3079·2019-08-29 12:46
閱讀 1016·2019-08-29 12:19