zoukankan      html  css  js  c++  java
  • java web response提供文件下载功能

    webapp项目的结构如下图:

    download.html文件的内容如下:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
            <h1>资源下载:</h1>
           <p> 单纯地使用a标签时,只有浏览器不能解析的文件才会是下载,否则将被浏览器直接解析。</p>
            <a href="/WEB/resource/a.mp3" >a.mp3</a><br>
            <a href="/WEB/resource/a.exe" >a.exe</a><br>
            <a href="/WEB/resource/a.txt" >a.txt</a><br>
            <a href="/WEB/resource/a.xlsx" >a.xlsx</a><br>
            <a href="/WEB/resource/a.png" >a.png</a><br>
    
            <p>因此,使用a标签结合servlet的response指示浏览器不解析这些待下载文件</p>
            <a href="/WEB/download?filename=a.mp3" >a.mp3</a><br>
            <a href="/WEB/download?filename=a.exe" >a.exe</a><br>
            <a href="/WEB/download?filename=a.txt" >a.txt</a><br>
            <a href="/WEB/download?filename=a.xlsx" >a.xlsx</a><br>
            <a href="/WEB/download?filename=a.png" >a.png</a><br>
    </body>
    </html>
    

    负责处理下载的Servlet——download.java文件的内容如下:

    package com.download.servlet;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class Download
     */
    public class Download extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1.获取请求下载的文件名
            String filename = request.getParameter("filename");
    
            //2.获取文件的文件系统路径
            String filePath = request.getServletContext().getRealPath("resource/"+filename);
    
            //3.设置响应头,提示浏览器不要解析响应的文件数据,而是以附件(attachment)的形式解析,即下载功能
            response.setContentType(this.getServletContext().getMimeType(filename));
            response.setHeader("Content-Disposition", "attachment;filename="+filename);
    
            //4.读取文件的 输入流,以及响应的输出流,并将数据输出给客户端
            InputStream in = new FileInputStream(filePath);
            ServletOutputStream out = response.getOutputStream();
            int len = 0;
            byte[] buf = new byte[1024];
            while((len=in.read(buf))!=-1) {
                out.write(buf, 0, len);
            }
    
            in.close();
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
    

    在浏览器地址栏中输入http://localhost:8080/DownloadServlet/download.html

    注:若您觉得这篇文章还不错请点击右下角推荐,您的支持能激发作者更大的写作热情,非常感谢!

  • 相关阅读:
    神文章2:文本矩阵简述 V1.0 -vivo神人
    收集:经典语录收集
    java 实现唯一ID生成器
    Mybatis-Generator自动生成XML文件以及接口和实体类
    form表单提交,Servlet接收并读取Excel文件
    海南小地图(echart)
    Echart 仪表盘和柱形图
    微信小程序图片上传并展示
    springMvc基于注解登录拦截器
    这是一个定时脚本,主要功能是遍历该文件夹下的所有文件并存储到数组,对数据中的文件进行操作,一个一个移动到指定的目录下,并删除原有文件
  • 原文地址:https://www.cnblogs.com/f-ck-need-u/p/8306816.html
Copyright © 2011-2022 走看看