• 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.于是就可以下载啦!

  • 相关阅读:
    Oracle的 listagg() WITHIN GROUP ()函数使用
    AJAX工作原理与缺点
    牛客网数据库SQL实战(此处只有答案,没有表内容)
    Jsp的四大作用域与九大对象
    eclipse的debug调试技巧
    浏览器与服务器交互
    eclipse图标含义
    不要在构造和析构函数中调用虚函数
    构造,析构 cpp
    2 c++对象被使用前要先被初始化
  • 原文地址:https://www.cnblogs.com/iceywu/p/12323714.html
Copyright © 2020-2023  润新知