日期:2014-05-20 浏览次数:20822 次
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String sufix = request.getParameter("s"); String path = request.getParameter("p") + "." + sufix; try { String fileName = request.getParameter("f").trim(); int c = fileName.lastIndexOf("."); String name = fileName.substring(0, c > 0 ? c : fileName.length()) + "." + sufix; response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachement;filename=" + new String(name.getBytes("GBK"), "ISO-8859-1")); File file = new File(Const.getCurrentUtterlyPath() + path); if (!file.exists()) { throw new IOException(fileName + ",所下载的文件不存在!"); } response.setContentLength(Integer.parseInt(file.length() + "")); InputStream fs = new FileInputStream(file); OutputStream os = response.getOutputStream(); byte[] buff = new byte[1024]; int readCount = 0; while ((readCount = fs.read(buff)) != -1) { os.write(buff, 0, readCount); } if (fs != null) { fs.close(); } if (os != null) { os.close(); } } catch (IOException e) { LOG.error("error: " + e.getMessage() + ",path: " + path); throw e; } response.setStatus(response.SC_OK); response.flushBuffer(); }
------解决方案--------------------
先保存,再打包,最后扔给客户端,这是比较安全的做法。如果都在内存中操作,程序挂掉的可能行很高。