• java web如何实现文件下载功能?


    一、超链接下载:

    这种方式非常简单,就是在超链接里面写上即将下载的文件路径,我这里将文件放在webapp下面的download文件夹里面:

    <a href="download/notice1.pdf"></a>

    但是有一个弊端就是,如果下载的文件可以直接被浏览器识别就会自动打开,比如.png,.pdf文件,如果是.zip等文件,则不会打开。

    二、Servlet下载:

    为了解决第一种方式的弊端,我们采取Servlet下载方式。

    1.新建Servlet文件,可以命名为DownloadServlet,映射url是“/downloadServlet”,我的项目名称是suiningAdmissions;

    2.在DownloadServlet中加入以下内容,其中filename是你在下载的时候需要传递的参数,是你即将下载的文件的名称;

    package cn.itIcey.suining.web.servlet;
    
    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.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    @WebServlet("/downloadServlet")
    public class DownloadServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获得请求文件名
            String filename = request.getParameter("filename");
            System.out.println(filename);
    
            //设置文件MIME类型
            response.setContentType(getServletContext().getMimeType(filename));
            //设置Content-Disposition
            response.setHeader("Content-Disposition", "attachment;filename="+filename);
            //读取目标文件,通过response将目标文件写到客户端
            //获取目标文件的绝对路径
            String fullFileName = getServletContext().getRealPath("/download/" + filename);
            //System.out.println(fullFileName);
            //读取文件
            InputStream in = new FileInputStream(fullFileName);
            OutputStream out = response.getOutputStream();
            byte[] buffer = new byte[1024];
            int len;
            //循环取出流中的数据
            while((len = in.read(buffer)) != -1){
                out.write(buffer,0,len);
            }
    
            in.close();
            out.close();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }

    3.将下载链接重新设置,其中/suiningAdmission/downloadServlet是我创建的Servlet的映射路径,注意一定要把前面的项目名称加上去!filename后面的内容就是下载的文件名称。

    <a href="/suiningAdmissions/downloadServlet?filename=notice3.pdf"

    4.于是就可以下载啦!

  • 相关阅读:
    【leetcode-100】 简单 树相关题目
    【leetcode-101】 对称二叉树
    【2】【leetcode-105,106】 从前序与中序遍历序列构造二叉树,从中序与后序遍历序列构造二叉树
    【leetcode-102,107,103】 二叉树的层次遍历
    iOS开发
    对称加密和不对称加密原理
    uiimageview 异步加载图片
    如何让IOS中的文本实现3D效果
    SDWebImage使用,图片加载和缓存
    ios 图片处理( 1.按比例缩放 2.指定宽度按比例缩放
  • 原文地址:https://www.cnblogs.com/iceywu/p/12323714.html
Copyright © 2020-2023  润新知