摘要:瀏覽器下載代碼如下通過循環將讀入的文件的內容輸出到瀏覽器中如果文件名為中文,上面的代碼下載的文件名會亂碼。解決中文亂碼方法拿到瀏覽器請求的判斷是否包含,是則直接講文件名轉換為,否則使用轉換。
場景描述:
由于項目需求,需要支持瀏覽器下載文件,比如招聘網站的在線簡歷下載。 瀏覽器下載代碼如下:
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; // 通過循環將讀入的Word文件的內容輸出到瀏覽器中 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(); } }
如果文件名為中文,上面的代碼下載的文件名會亂碼。
解決中文亂碼方法:拿到瀏覽器請求的usreAgent,判斷是否包含MSIE,是則直接講文件名轉換為bytes,否則使用UTF-8轉換。 然后將bytes使用ISO-8859-1編碼轉換為字符串,返回到瀏覽器。代碼如下:
public class DownloadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // codes.. String name = "中文名 帶空格 的測試文件.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"); // 文件名外的雙引號處理firefox的空格截斷問題 response.setHeader("Content-disposition", String.format("attachment; filename="%s"", name)); // codes.. } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70140.html
摘要:什么是對象響應由狀態行實體內容消息頭一個空行組成。為什么使用方法能夠正常向瀏覽器輸出中文呢你好呀我是中國這句代碼在轉成數組的時候默認查的是編碼,而你好呀我是中國支持編碼,所以可以正常顯示出來。 response、request對象 Tomcat收到客戶端的http請求,會針對每一次請求,分別創建一個代表請求的request對象、和代表響應的response對象 既然request對象...
摘要:在項目中發現,使用下載中文名文件的時候,下載的文件名是亂碼的問題。但是這個問題在,,中是沒有的。原先以為是的,但是細細研究之下你會發現這個簡單的文件下載問題在協議里經歷了多少波折。 在項目中發現,使用Safari下載中文名文件的時候,下載的文件名是亂碼的問題。但是這個問題在IE,Firefox,Chrome中是沒有的。原先以為是Safari的bug,但是細細研究之下你會發現這個簡單的文...
摘要:代碼量也的確減少很多也能夠獲取普通字段的參數上傳文件名的中文亂碼和上傳數據的中文亂碼我把文件名改成中文,就亂碼了表單提交過來的中文數據也亂碼了。 什么是文件上傳? 文件上傳就是把用戶的信息保存起來。 為什么需要文件上傳? 在用戶注冊的時候,可能需要用戶提交照片。那么這張照片就應該要進行保存。 上傳組件(工具) 為什么我們要使用上傳工具? 為啥我們需要上傳組件呢?當我們要獲取客戶端的數據...
閱讀 1967·2021-11-22 15:33
閱讀 3005·2021-11-18 10:02
閱讀 2612·2021-11-08 13:16
閱讀 1623·2021-10-09 09:57
閱讀 1372·2021-09-30 09:47
閱讀 2008·2019-08-29 13:05
閱讀 3072·2019-08-29 12:46
閱讀 1010·2019-08-29 12:19