• Java代码实现文件下载


    昨天晚上写了一篇文件上传的,今天上午把文件下载弄了一下,还是commons中的包

    commons-fileupload.jar、commons-io.jar,下载位置就不说了,apache网站上找

    这是一个web工程,下面有个截图

    仅供参考,下面是index.jsp代码

    View Code
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    response.sendRedirect(
    "showfile.jspx");
    %>

    showfile.jsp

    View Code
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>文件下载</title>
    </head>
    <body>
    请选择您要下载的文件:<br/>
    <c:forEach items="${fileList}" var="fileName">
    <a href="download.jspx?filename=${fileName }">${fileName }</a><br/>
    </c:forEach>
    </body>
    </html>

    web.xml,这个没什么好看的,大家新建servlet时会自动完成web.xml中内容,其实就是请求servlet路径

    View Code
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
    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"
    >
    <display-name></display-name>
    <servlet>
    <servlet-name>ShowFileServlet</servlet-name>
    <servlet-class>ShowFileServlet</servlet-class>
    </servlet>
    <servlet>
    <servlet-name>DownLoadServlet</servlet-name>
    <servlet-class>DownLoadServlet</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>ShowFileServlet</servlet-name>
    <url-pattern>/showfile.jspx</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>DownLoadServlet</servlet-name>
    <url-pattern>/download.jspx</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    </web-app>

    好了,下面是servlet了

    ShowFileServlet.java

    View Code
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;


    public class ShowFileServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    String path="D:/file";//下载资源位置
    List<String> fileList = new ArrayList<String>();//声明集合存放目录下所有文件的文件名
    File folder = new File(path);
    //判断文件夹是否存在并且是否是一个目录
    if(folder.exists()&&folder.isDirectory()){
    //获得目录中所有文件及目录
    File[] files = folder.listFiles();
    for(File file:files){
    //如果是文件
    if(file.isFile()){
    //将文件名放入集合
    fileList.add(file.getName());
    }
    }
    }
    request.setAttribute("fileList", fileList);
    request.getRequestDispatcher("showfile.jsp").forward(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    this.doGet(request, response);
    }

    }

    DownLoadServlet.java

    View Code
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URLEncoder;

    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class DownLoadServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    String path="D:/file";//资源位置
    String fileName1 = request.getParameter("filename");
    String fileName = new String(fileName1.getBytes("ISO-8859-1"),"utf-8");
    File file = new File(path+"/"+fileName);//下载资源文件
    //文件存在
    if(file.exists()){
    //设置响应类型及响应头
    System.out.println(fileName);
    response.setContentType("application/x-msdownload");
    //防止输出文件名乱码以下两种均可
    //response.setHeader( "Content-Disposition", "attachment;filename=\"" + new String( fileName.getBytes("gb2312"), "ISO8859-1" )+"\"");
    response.addHeader("Content-Disposition", "attachment;filename=\""+URLEncoder.encode(fileName,"UTF-8")+"\"");
    //读取文件
    InputStream inputStream = new FileInputStream(file);
    BufferedInputStream bis = new BufferedInputStream(inputStream);
    byte[] bytes = new byte[1024];
    ServletOutputStream outputStream = response.getOutputStream();//该对象可以在响应中写入二进制数据
    BufferedOutputStream bos = new BufferedOutputStream(outputStream);
    int readLength = 0;
    while((readLength = bis.read(bytes))!=-1){
    bos.write(bytes,0,readLength);
    }
    //释放资源
    inputStream.close();
    bis.close();
    bos.flush();
    outputStream.close();
    bos.flush();
    }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    this.doGet(request, response);
    }

    }

    好了,还有一点要注意,就是资源位置,我这里是在D盘创建了一个file文件夹,里面存存放几个测试文件就好了




  • 相关阅读:
    PHP设计模式
    PHP 面向对象
    MYSQL 覆盖索引
    MYSQL IOPS、QPS、TPS
    MySQL 事务嵌套
    MySQL 慢查询优化
    MySQL 查询状态
    MySQL 乐观锁和悲观锁
    MySQL 分库、分表
    Spring Boot 全局异常捕捉,自定义异常并统一返回
  • 原文地址:https://www.cnblogs.com/wufengxyz/p/2264944.html
Copyright © 2020-2023  润新知