美文网首页
文件的下载

文件的下载

作者: 小小蒜头 | 来源:发表于2017-10-24 13:53 被阅读14次

    将之前上传的文件在页面里遍历显示出来:

    ListFileServlet

    package com.chinasofti.UploadServlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * Created by yvettee on 2017/10/13.
     */
    //列出网站所有文件
    @WebServlet(name = "ListFileServlet", urlPatterns = "/listFileServlet")
    public class ListFileServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String path = this.getServletContext().getRealPath("/WEB-INF/upload");
            Map map = new HashMap();
            listFile(new File(path), map);
    
            request.setAttribute("map", map);
            request.getRequestDispatcher("/listFile.jsp").forward(request, response);
        }
    
        //如何保存递归出来的资源
        public void listFile(File file, Map map) {
            if (!file.isFile()) {//判断是否是文件
                File[] children = file.listFiles();//得到子级目录
                for (File f : children) {
                    listFile(f, map);//递归
                }
            } else {
                String fileName = file.getName().substring(file.getName().indexOf("_") + 1);
                map.put(file.getName(), fileName);//<a href="/servlet?fileName=文件在服务器的名称">文件的原始文件名</a>
            }
        }
    }
    
    

    listFile.jsp

    <%--
      Created by IntelliJ IDEA.
      User: yvettee
      Date: 2017/10/13
      Time: 17:02
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>文件预览</title>
    </head>
    <body>
    下载文件有:<br>
    <c:forEach var="entry" items="${requestScope.map}">
        <c:url var="url" value="/downloadServlet">
            <c:param name="fileName" value="${entry.key}"></c:param>
        </c:url>
        ${entry.value} <a href="${url}">下载</a><br>
    </c:forEach>
    </body>
    </html>
    
    

    下载:

    package com.chinasofti.UploadServlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.URLEncoder;
    
    /**
     * Created by yvettee on 2017/10/13.
     */
    @WebServlet(name = "DownloadServlet", urlPatterns = "/downloadServlet")
    public class DownloadServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //得到文件名(URL的)
            String fileName = request.getParameter("fileName");
            //中文要设置编码(get方式请求的)
            fileName = new String(fileName.getBytes("iso8859-1"), "UTF-8");
            System.out.println("文件名=" + fileName);
            //找出这个文件
            String path = this.getServletContext().getRealPath("/WEB-INF/upload") + File.separator + getPath(fileName);
            System.out.println("path=" + path);
            File file = new File(path + File.separator + fileName);
            System.out.println("路径=" + file.getAbsolutePath());
    
            if (!file.exists()) {
                request.setAttribute("message", "对不起,您要访问的资源不存在。");
                request.getRequestDispatcher("/message.jsp").forward(request, response);
                return;
            }
    
            //得到文件的原始文件名
            String oldName = file.getName().substring(file.getName().indexOf("_") + 1);
            System.out.println("oldName = " + oldName);
            //通知浏览器以下载方式打开下面发送的数据
            response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(oldName, "UTF-8"));
    
            FileInputStream in = new FileInputStream(file);
            int len = 0;
            byte buffer[] = new byte[1024];
            OutputStream out = response.getOutputStream();
            while ((len = in.read(buffer)) > 0) {
                out.write(buffer, 0, len);
            }
            in.close();
        }
    
        public String getPath(String fileName) {
            int hashCode = fileName.hashCode();
            int dir1 = hashCode & 0xf;
            int dir2 = (hashCode >> 4) & 0xf;
    
            return dir1 + File.separator + dir2;
        }
    }
    
    

    源代码:https://github.com/yvettee36/UploadFile
    上篇:http://www.jianshu.com/p/4c398d00c5df
    下篇:http://www.jianshu.com/p/f9e18ff6ceb3

    相关文章

      网友评论

          本文标题:文件的下载

          本文链接:https://www.haomeiwen.com/subject/fnwzyxtx.html