class="java">/** * 下载附件 * @param response * @throws IOException * @author zhangyd-c */ @RequestMapping(value="/downloadAccessory") public void downloadAccessory(String fileName, HttpServletResponse response, HttpServletRequest request) throws IOException { request.setCharacterEncoding("utf8"); //获取项目真实路径 String ctxPath = (new StringBuilder(String.valueOf(request.getSession().getServletContext().getRealPath("/")))).append("unstandard_materials/").toString(); //获取文件的真实路径 String downLoadPath = (new StringBuilder(String.valueOf(ctxPath))).append(fileName).toString(); File files = null; InputStream fis = null; OutputStream os = null; try { //获取文件 files = new File(downLoadPath); //读取该文件输入流到缓存 fis = new BufferedInputStream(new FileInputStream(downLoadPath)); /* * fis.available():返回输入流中估计的字节数(输入流方法的下一次调用的剩余字节数)。 */ byte buffer[] = new byte[fis.available()]; //按字节读取缓存 fis.read(buffer); response.reset(); response.addHeader("Content-Disposition", (new StringBuilder("attachment;filename=")).append(new String(fileName.replaceAll(" ", "").getBytes("utf-8"), "iso8859-1")).toString()); response.addHeader("Content-Length", (new StringBuilder()).append(files.length()).toString()); os = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); //将字节数组写入输出流 os.write(buffer); os.flush(); } catch (FileNotFoundException e) { response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("服务器上不存在该附件(已丢失)!请联系管理员!"); } catch (IOException e) { response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("服务器异常!请联系管理员!"); }finally{ if(fis != null){ fis.close(); } if(os != null){ os.close(); } } }
?