zoukankan      html  css  js  c++  java
  • 文件下载

    //接收参数并解决乱码
            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:文件的输入流

  • 相关阅读:
    关于vue的一些总结
    mvc中html导出成word下载-简单粗暴方式
    获取ip地址及城市信息
    .net中html转pdf
    div+css布局的问题
    js面向对象总结
    ES5&&ES6
    前端问题总结
    在vue的项目中引入swiper插件
    vue脚手架的使用
  • 原文地址:https://www.cnblogs.com/laodang/p/9394983.html
Copyright © 2011-2022 走看看