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>

 

posted @ 2018-07-06 11:25  淅沥沥丶下雨  阅读(295)  评论(0编辑  收藏  举报