springmvc文件下载之文件名下划线问题终极解决方案
2017-06-23 09:35
393 查看
直接上代码:Action中代码片段。
------------------你若盛开 蝴蝶自来------------------
@RequestMapping("download") public String download(ModelMap model, @ModelAttribute("e") Template t, HttpServletResponse response, HttpServletRequest request) throws Exception { Account acc = getLoginAccount(); if(acc==null || StringUtils.isBlank(acc.getAccount())){ return ("/account/login"); }
String fileUrl = template.getFileUrl(); //url 路径, 如 http://×××××/×××/××××/image/20170525/中文.jpg String filename = fileUrl.substring(fileUrl.lastIndexOf("/")+1); //截取最后的文件名 -> 中文.jpg filename = processFileName( request, filename); BufferedOutputStream bf = null; try { response.setHeader("Content-disposition", "attachment; filename = " + filename); bf = new BufferedOutputStream(response.getOutputStream()); bf.write(this.httpConverBytes(fileUrl,request)); }.... 重要的 processFileName方法。
public static String processFileName(HttpServletRequest request, String fileNames) { String codedfilename = null; try { String agent = request.getHeader("USER-AGENT"); if (null != agent && -1 != agent.indexOf("MSIE") || null != agent && -1 != agent.indexOf("Trident")) {// ie String name = java.net.URLEncoder.encode(fileNames, "UTF8"); codedfilename = name; } else if (null != agent && -1 != agent.indexOf("Mozilla")) {// 火狐,chrome等 codedfilename = new String(fileNames.getBytes("UTF-8"), "iso-8859-1"); } } catch (Exception e) { e.printStackTrace(); } return codedfilename; } //httpConverBytes 方法
public static byte[] httpConverBytes(String path,HttpServletRequest request) { BufferedInputStream in = null; ByteArrayOutputStream out = null; URLConnection conn = null; int httpResult=0; try { StringBuffer sb = new StringBuffer(); for(int i=0;i<path.length();i++){ char a=path.charAt(i); //url路径的中文部分重新编码 很重要 if(a>127){//将中文UTF-8编码 sb.append(URLEncoder.encode(String.valueOf(a), "utf-8")); }else{ sb.append(String.valueOf(a)); } } URL url = new URL(sb.toString()); //创建URL URLConnection urlconn = url.openConnection(); // 试图连接并取得返回状态码urlconn.connect(); HttpURLConnection httpconn = (HttpURLConnection) urlconn; httpResult = httpconn.getResponseCode(); in = new BufferedInputStream(httpconn.getInputStream()); if (httpResult != HttpURLConnection.HTTP_OK){ //不等于HTTP_OK说明连接不成功 System.out.print("连接失败!"); }else { out = new ByteArrayOutputStream(1024); byte[] temp = new byte[1024]; int size = 0; while ((size = in.read(temp)) != -1) { out.write(temp, 0, size); } byte[] content = out.toByteArray(); return content; } } catch (Exception e) { e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } try { out.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } 通过以上处理下划线问题解决了。
------------------你若盛开 蝴蝶自来------------------
相关文章推荐
- springmvc文件下载之文件名下划线问题终极解决方案
- 关于java文件下载文件名乱码问题解决方案
- Nodejs下载文件文件名中文乱码问题解决方案
- 关于java文件下载文件名乱码问题解决方案
- TOMCAT下载中文文件名的文件时报404的错之终极解决方案
- 关于java文件下载文件名乱码问题解决方案
- java文件下载文件名乱码问题解决方案
- javaweb 文件名下载乱码问题终极解决方案
- 关于java文件下载文件名乱码问题解决方案
- 实现文件下载与中文文件名乱码问题解决
- IIS下中文名的文件无法下载问题的解决方案
- php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
- 解决文件下载时文件名乱码问题
- 文件下载(解决中文文件名下载乱码问题) 收集
- Ruby on Rails实现文件的下载以及中文文件名乱码问题
- 下载文件 文件名 乱码的问题.
- java文件下载的文件名乱码问题的解决
- jsp实现文件下载与中文文件名乱码问题解决
- jsp实现文件下载与中文文件名乱码问题解决
- 关于IE等浏览器在下载JAR文件时的,将后缀更改为zip等问题及解决方案