`

java实现文件的下载并解决文件名乱码问题

    博客分类:
  • java
 
阅读更多
[size=medium]
response.setContentType("application/octet-stream"); 
		    String docBasePath = request.getSession().getServletContext().getRealPath("/").replace("/", File.separator).replace("\\", File.separator);
		    docBasePath = docBasePath.substring(0,docBasePath.length()-1);
		    String url = (String)request.getAttribute("url");
		    String docPath = (url).replace("/", File.separator).replace("\\", File.separator);
		    String fileRealName = docPath.substring(docPath.lastIndexOf(File.separator)+1);
		    String filePath = docBasePath+docPath;
		    File file = new File(filePath);
		    List<LawCaseDoc> caseDoc = this.getDocDao().find("from LawCaseDoc caseDoc where caseDoc.url like'%"+fileRealName+"%'");
		    String fileName = "";
		    if(caseDoc.size()==0){
		      	fileName = this.getFileDao().find("from SysFile sysFile where sysFile.fileUrl ='%"+fileRealName+"%'").get(0).getFileName();
		    }else{
		    	fileName = caseDoc.get(0).getName();
		    }
		    response.setContentLength((int)file.length()); 
		    if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0){
		        fileName = new String(fileName.getBytes("UTF-8"),"ISO8859-1");//firefox浏览器
		       }else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0){
		        fileName = URLEncoder.encode(fileName,"UTF-8");//IE浏览器
		       }
		    	response.reset();//如果有换行,对于文本文件没有什么问题,但是对于其它格
		    response.setHeader("Content-Disposition","attachment;filename="+fileName);
		    OutputStream out = response.getOutputStream();
		    FileInputStream fis = new FileInputStream(file);
		    byte[]b = new byte[1024];
		    int len = 0;
		    while((len = fis.read(b))>0){
		    	out.write(b, 0, len);
		    	
		    }
		    fis.close();
		    out.flush();
		    out.close();
	        //创建file对象 
[/size]
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics