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]