Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 317|回复: 0

[servlet学习]用servlet下载文件实例

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-10 01:55:04 | 显示全部楼层 |阅读模式
    一、HTML文件:Testdown.html
    <html>
    <title>文件下载测试</title>
    <body>
    <p>下载单个文件</p>
    <a href="/showimg/down?filename=/zip/1.zip">测试文件下载</a></br> <p>下载一个目录下的多个文件</p>
    <a href="/showimg/ShowFile">去下载多个文件</a></br> </body></html> 二、Servlet文件
    (1)下载单个文件:
    1. package com.tool;
    2. import java.io.BufferedInputStream;
    3. import java.io.BufferedOutputStream;
    4. import java.io.File;
    5. import java.io.FileInputStream;
    6. import java.io.IOException;
    7. import java.io.InputStream;
    8. import java.io.OutputStream;
    9. import javax.servlet.ServletException;
    10. import javax.servlet.http.HttpServlet;
    11. import javax.servlet.http.HttpServletRequest;
    12. import javax.servlet.http.HttpServletResponse;
    13. @SuppressWarnings("serial")
    14. public class FileDownLoadServlet extends HttpServlet{
    15.    
    16.     @Override
    17.     protected void service(HttpServletRequest request, HttpServletResponse response)
    18.             throws ServletException, IOException {
    19.         String path=request.getParameter("filename");
    20.         path=new String(path.getBytes("ISO-8859-1"),"utf-8");
    21.         download(path,request,response);
    22.     }
    23.    
    24.     @SuppressWarnings("deprecation")
    25.     public HttpServletResponse download(String path,HttpServletRequest request, HttpServletResponse response) {
    26.         try {
    27.             // path是指欲下载的文件的路径。
    28.             File file = new File(request.getRealPath("/")+"/"+path);
    29.             // 取得文件名。
    30.             String filename = file.getName();
    31.             // 取得文件的后缀名。
    32.             //String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
    33.             // 以流的形式下载文件。
    34.             InputStream fis = new BufferedInputStream(new FileInputStream(file));
    35.             byte[] buffer = new byte[fis.available()];
    36.             fis.read(buffer);
    37.             fis.close();
    38.             // 清空response
    39.             response.reset();
    40.             // 设置response的Header
    41.             response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("utf-8"),"ISO-8859-1"));
    42.             response.addHeader("Content-Length", "" + file.length());
    43.             OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
    44.             response.setContentType("application/octet-stream");
    45.             toClient.write(buffer);
    46.             toClient.flush();
    47.             toClient.close();
    48.         } catch (IOException ex) {
    49.             ex.printStackTrace();
    50.         }
    51.         return response;
    52.     }
    53. }
    复制代码
    (2)显示某一目录下所有文件:
    1. package com.tool;
    2. import java.io.File;
    3. import java.io.IOException;
    4. import java.util.ArrayList;
    5. import java.util.List;
    6. import javax.servlet.ServletException;
    7. import javax.servlet.http.HttpServlet;
    8. import javax.servlet.http.HttpServletRequest;
    9. import javax.servlet.http.HttpServletResponse;
    10. public class ShowFileServlet extends HttpServlet {
    11.         public void doGet(HttpServletRequest request, HttpServletResponse response)
    12.                         throws ServletException, IOException {
    13.                 String path = "c:/test";
    14.                 //声明集合存放目录下所有文件的文件名
    15.                 List
    16.    
    17.       fileList = new ArrayList
    18.      
    19.       ();
    20.                 File folder = new File(path);
    21.                 //判断文件夹是否存在并且是否是一个目录
    22.                 if(folder.exists() && folder.isDirectory()){
    23.                         //获得目录中所有文件及目录
    24.                         File[] files = folder.listFiles();
    25.                         for (File file : files) {
    26.                                 //如果是文件
    27.                                 if(file.isFile()){
    28.                                         //将文件名放入集合中
    29.                                         fileList.add(file.getName());
    30.                                 }
    31.                         }
    32.                 }
    33.                 request.setAttribute("fileList", fileList);
    34.                 request.getRequestDispatcher("showfile.jsp").forward(request, response);
    35.         }
    36.         public void doPost(HttpServletRequest request, HttpServletResponse response)
    37.                         throws ServletException, IOException {
    38.                 doGet(request,response);
    39.         }
    40. }
    41.      
    42.    
    复制代码
    (3)下载某一目录下的多个文件
    1. package com.tool;
    2. import java.io.BufferedInputStream;
    3. import java.io.BufferedOutputStream;
    4. import java.io.File;
    5. import java.io.FileInputStream;
    6. import java.io.IOException;
    7. import java.io.InputStream;
    8. import javax.servlet.ServletException;
    9. import javax.servlet.ServletOutputStream;
    10. import javax.servlet.http.HttpServlet;
    11. import javax.servlet.http.HttpServletRequest;
    12. import javax.servlet.http.HttpServletResponse;
    13. public class DownLoadServlet extends HttpServlet {
    14.         public void doGet(HttpServletRequest request, HttpServletResponse response)
    15.                         throws ServletException, IOException {
    16.                 String path = "C:/test";
    17.                 String fileName = request.getParameter("filename");
    18.                 File file = new File(path + "/" + fileName);
    19.                 //如果文件存在
    20.                 if (file.exists()) {
    21.                         //设置响应类型及响应头
    22.                         response.setContentType("application/x-msdownload");
    23.                         response.addHeader("Content-Disposition", "attachment; filename=""
    24.                                         + fileName + """);
    25.                         //读取文件
    26.                         InputStream inputStream = new FileInputStream(file);
    27.                         BufferedInputStream bis = new BufferedInputStream(inputStream);
    28.                         byte[] bytes = new byte[1024];
    29.                         ServletOutputStream outStream = response.getOutputStream();
    30.                         BufferedOutputStream bos = new BufferedOutputStream(outStream);
    31.                         int readLength = 0;
    32.                         while ((readLength = bis.read(bytes)) != -1) {
    33.                                 bos.write(bytes, 0, readLength);
    34.                         }
    35.                         //释放资源
    36.                         inputStream.close();
    37.                         bis.close();
    38.                         bos.flush();
    39.                         outStream.close();
    40.                         bos.close();
    41.                 }
    42.         }
    43.         public void doPost(HttpServletRequest request, HttpServletResponse response)
    44.                         throws ServletException, IOException {
    45.                 doGet(request, response);
    46.         }
    47. }
    复制代码
    三、web.xml
    <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaEE"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">  <display-name>Welcome to Tomcat</display-name>
    <description>
    Welcome to Tomcat
    </description>
      <servlet>
    <servlet-name>fileDownLoadServlet</servlet-name>
    <servlet-class>com.tool.FileDownLoadServlet</servlet-class>
    </servlet> <servlet>
    <servlet-name>ShowFileServlet</servlet-name>
    <servlet-class>com.tool.ShowFileServlet</servlet-class>
    </servlet> <servlet>
    <servlet-name>DownLoadServlet</servlet-name>
    <servlet-class>com.tool.DownLoadServlet</servlet-class>
    </servlet> <servlet-mapping>
    <servlet-name>fileDownLoadServlet</servlet-name>
    <url-pattern>/down</url-pattern>
    </servlet-mapping> <servlet-mapping>
    <servlet-name>ShowFileServlet</servlet-name>
    <url-pattern>/ShowFile</url-pattern>
    </servlet-mapping> <servlet-mapping>
    <servlet-name>DownLoadServlet</servlet-name>
    <url-pattern>/DownLoad</url-pattern>
    </servlet-mapping> </web-app>
      

       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/10/10/015503750.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 17:51 , Processed in 0.395398 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表