zoukankan      html  css  js  c++  java
  • 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.于是就可以下载啦!

  • 相关阅读:
    vim讲解
    tar常用解包
    linux扩展权限
    为Virtualbox中的Solaris10安装VBoxAdditions
    Solaris10下Telnet、SSH、ftp使用root登录
    linux软链接和硬链接
    curl命令学习(转载的)
    linux磁盘分区fdisk命令详解
    在服务器上排除问题的头五分钟
    Java对文件压缩/加密/解密/解压缩的例子,DES/RSA
  • 原文地址:https://www.cnblogs.com/iceywu/p/12323714.html
Copyright © 2011-2022 走看看