文件下載中文文件名亂碼

文件下載中文文件名亂碼和FireFox名中空格被截斷問題。瀏覽器

解決方法一:app

//只能字符被截斷問題,可是中文會出現亂碼,可能須要對其字符進行編碼(這沒有測試)
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileShowName+\"");

 

解決方法二:在Edge、Opera、IE、FireFox、Google等主流瀏覽器下都測試過。測試

 

private void downloadFile(InputStream in ,HttpServletRequest request, HttpServletResponse response ) throws IOException { String fileShowName ; String agent = request.getHeader("USER-AGENT"); System.out.println(" 瀏覽器agent信息 ---》" +agent); //IE內核瀏覽器,或者Edge瀏覽器
        if( null != agent && (-1 != agent.indexOf("MSIE") || -1 != agent.indexOf("Edge"))){ fileShowName = URLEncoder.encode(this.fileShowName, "utf-8"); //處理IE文件名空格變成"+"的問題
            fileShowName = fileShowName.replace("+", "%20"); }else{//非IE
            fileShowName = URLDecoder.decode(this.fileShowName, "utf-8"); //解決火狐,文件名中空格被截斷的狀況
            fileShowName = "=?UTF-8?B?" + (new String (Base64.encodeBase64(this.fileShowName.getBytes("UTF-8")))) + "?="; } response.addHeader("Content-Disposition", "attachment; filename=" + fileShowName); response.setContentType("application/octet-stream"); response.setHeader("Content-Length", fileSize + ""); OutputStream out = response.getOutputStream(); byte[] buffer = new byte[ bufferSize ]; int len; while ((len = in.read(buffer, 0, buffer.length)) != -1) { out.write(buffer, 0, len); } out.flush(); out.close(); in.close(); }
相關文章
相關標籤/搜索