• 文件下载


    //接收参数并解决乱码
            String filename = new String(request.getParameter("filename").getBytes("iso-8859-1"),"utf-8");
            //根据文件名称得到mime类型
            String mimeType = this.getServletContext().getMimeType(filename);
            response.setHeader("Content-Type", mimeType);
            //获取浏览器相关信息
            String agent = request.getHeader("User-Agent");
            //判断是什么浏览器,根据不同浏览器解码
            /*
             * 不同浏览器下载中文文件时解析文件编码不同,Firefox浏览器下载中文文件名的时候采用的是Base64的字符编码解码文件名.
             * 文件名是通过Content-Disposition消息带过去的,所以需要提前转换成URL或者Base64的编码后字符。过去才可以正常解码;
             */
            if(agent.contains("Firefox")){
                filename = base64EncodeFileName(filename);
            }else{
                filename = URLEncoder.encode(filename,"UTF-8");
            }
            //Content-Disposition该响应头告诉浏览器以什么方式处理,attachment值告诉以附件形式下载,filename值为附件显示名称。
            response.setHeader("Content-Disposition", "attachment;filename="+filename);
            InputStream is = this.getServletContext().getResourceAsStream("/download/中文文件.rmvb");
            ServletOutputStream os = response.getOutputStream();
            int len = 0;
            byte[] a = new byte[1024];
            while ((len=is.read(a)) != -1) {
                os.write(a,0,len);
            }
            is.close();
            os.close();
    public static String base64EncodeFileName(String fileName) {
            BASE64Encoder base64Encoder = new BASE64Encoder();
            try {
                return "=?UTF-8?B?"
                        + new String(base64Encoder.encode(fileName
                                .getBytes("UTF-8"))) + "?=";
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }

    文件下载:
    1.超链接下载,直接将文件路径写如href中(文件类型如果浏览器不支持会下载,如果支持会直接显示)
    2.超链接下载,手动编写代码的方式完成文件下载
    Content-Type :文件的MIME类型
    Content-Disposition:以下载的形式打开文件
    InputStream:文件的输入流

  • 相关阅读:
    mysql在ubuntu中的操作笔记(详)
    Ubuntu16.04上安装MySQL(详细过程)
    Python全栈开发day7
    Python全栈开发day6
    Python全栈开发day5
    Python内置函数总结
    Python全栈开发day4
    Python 集合方法总结
    Python全栈开发day3
    Web前端之CSS_day3-4
  • 原文地址:https://www.cnblogs.com/laodang/p/9394983.html
Copyright © 2020-2023  润新知