• HttpServletResponse(文件下载)


     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // 获取下载文件名称
            String filename = request.getParameter("filename");
            // 中文乱码问题
            filename = new String(filename.getBytes("ISO8859-1"), "UTF-8");
            // 获取请求头
            String agent = request.getHeader("User-Agent");
            String filenameEnconding = "";
            // 根据不同的浏览器进行编码(模板代码)
            if (agent.contains("MSIE")) {
                // IE浏览器
                filenameEnconding = URLEncoder.encode(filename, "utf-8");
                filenameEnconding = filenameEnconding.replace("+", " ");
            } else if (agent.contains("Firefox")) {
                // 火狐浏览器
                BASE64Encoder base64Encoder = new BASE64Encoder();
                filenameEnconding = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
            } else {
                // 其它浏览器
                filenameEnconding = URLEncoder.encode(filename, "utf-8");
            }
            // 要下载的文件类型 --客户端通过文件的MIME类型区分文件类型
            response.setContentType(this.getServletContext().getMimeType(filename));
            // 告诉客户端文件不可以直接解析,需要下载
            response.setHeader("Content-Disposition", "attachment;filename=" + filenameEnconding);
            // 获取文件绝对路径
            String path = this.getServletContext().getRealPath("download/" + filename);
            // 创建输入流
            InputStream in = new FileInputStream(path);
            // 获取输出流 通过response获取
            ServletOutputStream out = response.getOutputStream();
            int len = 0;
            byte[] b = new byte[1024];
            while ((len = in.read(b)) != -1) {
                // 将字节数组写给客户端
                out.write(b, 0, len);
            }
            // 释放资源
            in.close();
        }
    <title>下载页</title>
    </head>
    <body>
    <h1>使用A标签直接指向服务器上的资源提供下载功能</h1>
    <a href="/web01/download/aaa.txt">aaa.txt</a>
    <a href="/web01/download/dameinv.jpg">dameinv.jpg</a>
    <a href="/web01/download/dameinv.zip">dameinv.zip</a>
    <h1>使用服务器编码端实现文件下载</h1>
    <a href="/web01/download?filename=aaa.txt">aaa.txt</a>
    <a href="/web01/download?filename=dameinv.jpg">dameinv.jpg</a>
    <a href="/web01/download?filename=dameinv.zip">dameinv.zip</a>
    <a href="/web01/download?filename=反射.txt">反射.txt</a>
    </body>
    </html>
  • 相关阅读:
    Linux查看SSL证书是否过期
    docker安装Elasticsearch:7.6.0启动失败,ERROR: [1] bootstrap checks failed
    patroni启动,提示waiting for leader to bootstrap
    pg_buffercache
    使用oid2name列出数据库和对应的oid
    Centos7下安装ORACLE 11g,弹窗不显示
    CentOS 7.5 安装Oracle 11gR2 86%报错:Error in invoking target 'agent nmhs' of makefile
    pg中与超时设置有关的参数
    JDBC驱动程序注册 JDBC简介(二)
    JDBC设计理念浅析 JDBC简介(一)
  • 原文地址:https://www.cnblogs.com/Jxliu/p/9272668.html
Copyright © 2020-2023  润新知