zoukankan      html  css  js  c++  java
  • 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{...} 一般用来关闭流这些,不管有没有异常,

  • 相关阅读:
    红外应用
    电池分类及特点
    温湿度传感器AM2302(DH22)
    lora
    跳频扩频技术学习
    STM32F4/F7运算性能
    物联网相关模块
    DC-DC芯片
    外部引用CSS中 link与@import的区别
    超酷实用的jQuery焦点图赏析及源码
  • 原文地址:https://www.cnblogs.com/hoobey/p/5294375.html
Copyright © 2011-2022 走看看