• 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>
  • 相关阅读:
    一个星期自动态的网站设计
    java特权制度设计篇
    mac默认截图、截图代码
    NSDateFormatter
    vlan 以及 Linux实现的IEEE 802.1Q VLAN
    gtk+blade+anjuta 的简单实例
    NetBSD是个开源到源码的系统
    创作gtk源码级vim帮助文档 tags
    linux 怎么使用一个c/c++库
    linux 终端控制-- 多彩输出 格式排版
  • 原文地址:https://www.cnblogs.com/Jxliu/p/9272668.html
Copyright © 2020-2023  润新知