使用Servlet实现下载文件的功能


在前台有一个下载链接,比如

  1. <a href="DownLoadServlet">下载</a> <br/>  

使用Servlet实现下载:

  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.IOException;  
  4. import java.net.URLEncoder;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.ServletOutputStream;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. public class DownLoadServlet extends HttpServlet {  
  13.   
  14.       
  15.     public DownLoadServlet() {  
  16.         super();  
  17.     }  
  18.   
  19.   
  20.     public void destroy() {  
  21.         super.destroy(); // Just puts "destroy" string in log  
  22.         // Put your code here  
  23.     }  
  24.   
  25.   
  26.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  27.             throws ServletException, IOException {  
  28.         doPost(request,response);  
  29.     }  
  30.   
  31.       
  32.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  33.             throws ServletException, IOException {  
  34.         //处理请求  
  35.         //读取要下载的文件  
  36.         File f = new File("E:/好久不见.mp3");  
  37.         if(f.exists()){  
  38.             FileInputStream  fis = new FileInputStream(f);  
  39.             String filename=URLEncoder.encode(f.getName(),"utf-8"); //解决中文文件名下载后乱码的问题  
  40.             byte[] b = new byte[fis.available()];  
  41.             fis.read(b);  
  42.             response.setCharacterEncoding("utf-8");  
  43.             response.setHeader("Content-Disposition","attachment; filename="+filename+"");  
  44.             //获取响应报文输出流对象  
  45.             ServletOutputStream  out =response.getOutputStream();  
  46.             //输出  
  47.             out.write(b);  
  48.             out.flush();  
  49.             out.close();  
  50.         }     
  51.           
  52.     }  
  53.   
  54.     /** 
  55.      * Initialization of the servlet. <br> 
  56.      * 
  57.      * @throws ServletException if an error occurs 
  58.      */  
  59.     public void init() throws ServletException {  
  60.         // Put your code here  
  61.     }  
  62.   
  63. }  

上传文件的时候需要两个jar
用的是commons-fileupload-1.2.2.jarcommons-io-2.0.1.jar组件,可以去apache官网上去下载,然后放到WebRoot/WEB-INF/lib目录下
上传代码
<body>
<form action="Upload" enctype="multipart/form-data" method="post">
<center><b>文件上传 </b>
<p>文件名称: <input type="file" name="upload">
</p>
<p><input type="submit" value=" 开始上传" ></p>
</center>
</form>
</body>
uploadServlet.java
package com.unit.upload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Upload extends HttpServlet {
       private static final long serialVersionUID = 1L;
   
    public Upload() {
        super();
        // TODO Auto-generated constructor stub
    }
      
       protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              response.setContentType("text/html;charset=gb2312");
              PrintWriter out=response.getWriter();
              
              try {
                     InputStream source=request.getInputStream();//得到上传的输入流
              String path="F:/Upload";
              File file=new File(path, "java");
              FileOutputStream fos=new FileOutputStream(file);
              byte buff[]=new byte[1024];
              int temp;
              while((temp=source.read(buff))!=-1)//得到buf的东西
              {
                     fos.write(buff, 0, temp);
              }
              source.close();
              fos.close();
              out.print("文件上传成功");
                     
              } catch (Exception e) {
                     System.out.println(e);
                     out.print("文件不能上传");
              }
              
       }
}
下载
代码
<body>
<form action="Download" enctype="multipart/form-data" method="post">
<center><b>文件下载 </b>
<p><a href="Download?filename=java.txt">下载文件 java.txt</a></p>
</center>
</form>
</body>
Downloadservlet.java
package com.unit.upload;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Download
*/
public class Download extends HttpServlet {
       private static final long serialVersionUID = 1L;
      
    public Download() {
        super();
     
    }
       protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              BufferedInputStream bis=null;
              BufferedOutputStream bos=null;
              
              try {
                     String filename=request.getParameter("filename");
                     String filename2=new String(filename.getBytes("iso8859-1"),"gbk");//转换文件的类型
                     response.setContentType("application/x-msdownload");
                     System.out.println("***************88文件下载成功");
                     
                     
                     response.addHeader("Content-Disposition", "attachment;filename="+filename);
                     bis=new BufferedInputStream(new FileInputStream(getServletContext().getRealPath("/"+filename2)));
                     bos=new BufferedOutputStream(response.getOutputStream());
                     byte buff[]=new byte[1024*2];
                     int byteRead;
                     while((byteRead=bis.read())!=-1){
                            bos.write(buff, 0, byteRead);
                     }
                     
              } catch (Exception e) {
              
              }finally{
                     if(bis!=null){
                            bis.close();
                     }
                     if(bos!=null){
                            bos.close();
                     }
              }
       }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值