Java 实现文件下载--解决中文乱码

xiaoxiao2021-02-28  14

java 文件下载中文乱码问题。期初我认为是不通浏览器的兼容问题,但是实际上就是。看下面一段代码

/** * 文件下载 * @param response * @param filePath */ public void fileDownLoad(HttpServletResponse response,String filePath){ File f = new File(filePath); if(!f.exists()){ System.out.println("==下载文件不存在=="+filePath); return; } String fileName = f.getName();//文件名 response.setCharacterEncoding("UTF-8"); response.setContentType("multipart/form-data"); InputStream is = null; OutputStream os = null; try { System.out.println("===fileDowload==文件名:"+fileName); //String tempFileName =new String(fileName.getBytes("utf-8"),"ISO-8859-1"); String tempFileName = URLEncoder.encode(fileName, "UTF-8"); response.setHeader("Content-Disposition","attachment;fileName="+tempFileName);//设置响应的文件名 response.setHeader("Content-Length",String.valueOf(f.length()));//设置文件大小 is = new FileInputStream(new File(filePath)); os = response.getOutputStream(); byte[] b = new byte[1024]; int length=0; while((length=is.read(b))>0){ os.write(b, 0, length); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try{ if(is != null) is.close();//关闭流 if(os != null) os.close(); }catch(Exception ex){ ex.printStackTrace(); } } }

这段下载的代码在浏览器谷歌、火狐下都是正常的,但是在IE下却会乱码。开始也考虑过转码:

String tempFileName =new String(fileName.getBytes("utf-8"),"ISO-8859-1");

但是问题没有解决。做前端与浏览器的兼容战斗从没有停止过。最终看到别人带的微博,找到了一种兼容的方法:

response.setHeader("Content-Disposition","attachment;fileName=\""+tempFileName+"\"");//设置响应的文件名

这个方法并没有做全面的测试,但是目前的问题已解决。

转载请注明原文地址: https://www.6miu.com/read-1400269.html

最新回复(0)