java下载文件文件名针对不同浏览器乱码,文件名中存在括号等乱码问题
2017-11-10 15:58
555 查看
@Get("/downLoadDemoFile1") public String downLoadDemoFile1(Invocation inv) { String userAgent = inv.getRequest().getHeader("User-Agent"); String filename1 = "操作说明.pdf"; //针对IE或者以IE为内核的浏览器: if (userAgent.contains("MSIE")||userAgent.contains("Trident")) { try { filename1 = URLEncoder.encode(filename1, "UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { //非IE浏览器的处理: try { filename1 = new String(filename1.getBytes("UTF-8"),"ISO-8859-1"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } String filename = "dgsx.pdf"; String path = Constants.DOWNLOAD_BASE_FOLD+"/demo/"+filename; logger.info(path); InputStream ins = null; BufferedInputStream bins = null; OutputStream outs = null; BufferedOutputStream bouts = null; try { path = new String(path.getBytes("ISO-8859-1"), "UTF-8"); File file = new File(path);// 构造要下载的文件 if (file.exists()) { // String suffix = path.substring(path.lastIndexOf(".") + 1); ins = new FileInputStream(path);// 构造一个读取文件的IO流对象 bins = new BufferedInputStream(ins);// 放到缓冲流里面 outs = inv.getResponse().getOutputStream();// 获取文件输出IO流 bouts = new BufferedOutputStream(outs); inv.getResponse().setContentType("application/octet-stream;charset=utf-8");// 设置response内容的类型 // inv.getResponse().setHeader("Content-disposition","attachment;filename=\"" + URLEncoder.encode("操作说明.pdf", "UTF-8")+"\"");// 设置头部信息 inv.getResponse().setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", filename1)); // inv.getResponse().setContentType("application/vnd.ms-excel;charset=utf-8"); inv.getResponse().setCharacterEncoding("UTF-8"); int bytesRead = 0; byte[] buffer = new byte[8192]; // 开始向网络传输文件流 while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) { bouts.write(buffer, 0, bytesRead); } bouts.flush();// 这里一定要调用flush()方法 } else { logger.info("==============>>下载的文件不存在"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (ins != null) { ins.close(); ins = null; } if (bins != null) { bins.close(); bins = null; } if (outs != null) { outs.close(); outs = null; } if (bouts != null) { bouts.close(); bouts = null; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return "@"; }
相关文章推荐
- 针对前台json乱码和不同浏览器文件下载时文件名乱码问题
- 不同浏览器上中文文件名的下载/导出乱码问题(Java)
- 不同浏览器上中文文件名的下载/导出乱码问题(Java)
- Java中浏览器的文件下载时文件名乱码问题
- Java strtus2文件下载不同浏览器文件名中文乱码处理
- Java中浏览器的文件下载时文件名乱码问题
- java 下载文件解决文件名乱码问题
- 关于java文件下载文件名乱码问题解决方案
- java文件下载的中文文件名乱码问题的解决
- 不同浏览器上中文文件名的下载乱码问题
- java文件下载的文件名乱码问题的解决
- 关于java文件下载文件名乱码问题解决方案
- 不同浏览器上中文文件名的上传/下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- Java web中不同浏览器间导出Excel文件名称乱码问题解决方案
- 不同浏览器上中文文件名的下载乱码问题
- 关于浏览器下载文件的文件名会出现乱码的问题
- 不同浏览器上中文文件名的上传/下载乱码问题
- Java文件下载时所输出文件名乱码问题
- 解决不同浏览器上中文文件名的下载乱码问题