springmvc文件下载之文件名下划线问题终极解决方案
2017-05-26 09:48
337 查看
直接上代码:Action中代码片段。
@RequestMapping("download") publicStringdownload(ModelMapmodel,@ModelAttribute("e")Templatet,HttpServletResponseresponse,HttpServletRequestrequest)throwsException{ Accountacc=getLoginAccount(); if(acc==null||StringUtils.isBlank(acc.getAccount())){ return("/account/login"); }
StringfileUrl=template.getFileUrl(); //url 路径, 如 http://×××××/×××/××××/image/20170525/中文.jpg Stringfilename=fileUrl.substring(fileUrl.lastIndexOf("/")+1); //截取最后的文件名 -> 中文.jpg filename=processFileName(request,filename); BufferedOutputStreambf=null; try{ response.setHeader("Content-disposition","attachment;filename="+filename); bf=newBufferedOutputStream(response.getOutputStream()); bf.write(this.httpConverBytes(fileUrl,request)); }.... 重要的 processFileName方法。
publicstaticStringprocessFileName(HttpServletRequestrequest,StringfileNames){ Stringcodedfilename=null; try{ Stringagent=request.getHeader("USER-AGENT"); if(null!=agent&&-1!=agent.indexOf("MSIE")||null!=agent &&-1!=agent.indexOf("Trident")){//ie Stringname=java.net.URLEncoder.encode(fileNames,"UTF8"); codedfilename=name; }elseif(null!=agent&&-1!=agent.indexOf("Mozilla")){//火狐,chrome等 codedfilename=newString(fileNames.getBytes("UTF-8"),"iso-8859-1"); } }catch(Exceptione){ e.printStackTrace(); } returncodedfilename; } //httpConverBytes 方法
publicstaticbyte[]httpConverBytes(Stringpath,HttpServletRequestrequest){ BufferedInputStreamin=null; ByteArrayOutputStreamout=null; URLConnectionconn=null; inthttpResult=0; try{ StringBuffersb=newStringBuffer(); for(inti=0;i<path.length();i++){ chara=path.charAt(i); //url路径的中文部分重新编码 很重要 if(a>127){//将中文UTF-8编码 sb.append(URLEncoder.encode(String.valueOf(a),"utf-8")); }else{ sb.append(String.valueOf(a)); } } URLurl=newURL(sb.toString());//创建URL URLConnectionurlconn=url.openConnection();//试图连接并取得返回状态码urlconn.connect(); HttpURLConnectionhttpconn=(HttpURLConnection)urlconn; httpResult=httpconn.getResponseCode(); in=newBufferedInputStream(httpconn.getInputStream()); if(httpResult!=HttpURLConnection.HTTP_OK){//不等于HTTP_OK说明连接不成功 System.out.print("连接失败!"); }else{ out=newByteArrayOutputStream(1024); byte[]temp=newbyte[1024]; intsize=0; while((size=in.read(temp))!=-1){ out.write(temp,0,size); } byte[]content=out.toByteArray(); returncontent; } }catch(Exceptione){ e.printStackTrace(); } finally{ try{ in.close(); }catch(IOExceptione){ e.printStackTrace(); } try{ out.close(); }catch(IOExceptione){ e.printStackTrace(); } } returnnull; } 通过以上处理下划线问题解决了。
相关文章推荐
- springmvc文件下载之文件名下划线问题终极解决方案
- 关于java文件下载文件名乱码问题解决方案
- Nodejs下载文件文件名中文乱码问题解决方案
- 关于java文件下载文件名乱码问题解决方案
- TOMCAT下载中文文件名的文件时报404的错之终极解决方案
- 关于java文件下载文件名乱码问题解决方案
- java文件下载文件名乱码问题解决方案
- javaweb 文件名下载乱码问题终极解决方案
- 关于java文件下载文件名乱码问题解决方案
- 实现文件下载与中文文件名乱码问题解决
- IIS下中文名的文件无法下载问题的解决方案
- php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
- 解决文件下载时文件名乱码问题
- 文件下载(解决中文文件名下载乱码问题) 收集
- Ruby on Rails实现文件的下载以及中文文件名乱码问题
- 下载文件 文件名 乱码的问题.
- java文件下载的文件名乱码问题的解决
- jsp实现文件下载与中文文件名乱码问题解决
- jsp实现文件下载与中文文件名乱码问题解决
- 关于IE等浏览器在下载JAR文件时的,将后缀更改为zip等问题及解决方案