Response实现文件下载

使用Myeclipse 工具

       在WebRoot目录下创建一个Download文件夹(new-->folder),以存放 附件(图片,文件...),

具体实现下载功能的代码如下:

[java] view plain copy
  1. package cn.response;  
  2.   
  3. import java.io.*;  
  4. import java.net.URLEncoder;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. //response实现从服务器上,下载文件  
  12. public class Response_download extends HttpServlet {  
  13.   
  14.   
  15.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  16.             throws ServletException, IOException {  
  17.         String path = this.getServletContext().getRealPath("/Download/定南中学.jpg");//获取文件的相对路径  
  18.         String filename = path.substring(path.lastIndexOf("\")+1);//获取文件名称,在转化为子串  
  19.         //response.setHeader告诉浏览器以什么方式打开  
  20.         //假如文件名称是中文则要使用 URLEncoder.encode()编码  
  21.         //否则直接使用response.setHeader("content-disposition", "attachment;filename=" + filename);即可  
  22.         response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));  
  23.           
  24.         InputStream in = null ;  
  25.         OutputStream out = null ;  
  26.         try  
  27.         {  
  28.            in = new FileInputStream(path); //获取文件的流  
  29.            int len = 0;  
  30.            byte buf[] = new byte[1024];//缓存作用  
  31.            out = response.getOutputStream();//输出流  
  32.            while( (len = in.read(buf)) > 0 ) //切忌这后面不能加 分号 ”;“  
  33.            {  
  34.                out.write(buf, 0, len);//向客户端输出,实际是把数据存放在response中,然后web服务器再去response中读取  
  35.            }  
  36.         }finally  
  37.         {  
  38.             if(in!=null)  
  39.             {  
  40.               try{                
  41.                   in.close();  
  42.               }catch(IOException e){  
  43.                  e.printStackTrace();  
  44.                }  
  45.             }  
  46.               
  47.             if(out!=null)  
  48.             {  
  49.                try{  
  50.                    out.close();  
  51.                }catch(IOException e){  
  52.                    e.printStackTrace();  
  53.                 }  
  54.              }  
  55.          }  
  56.           
  57.   
  58.      }  
  59.   
  60.   
  61.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  62.             throws ServletException, IOException {  
  63.   
  64.       
  65.     }  
  66.   
  67. }  

注意:         try{...}  finally{...}

        如果 try{...} catch{...}  中没有 catch{...},则必须要加上 finally{...}

        finally{...} 一般用来关闭流这些,不管有没有异常,

原文地址:https://www.cnblogs.com/hoobey/p/5294375.html