首页 > 其他 > 详细

文件下载

时间:2018-07-31 12:38:29      阅读:143      评论:0      收藏:0      [点我收藏+]
//接收参数并解决乱码
        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);
        }
    }

 

文件下载

原文:https://www.cnblogs.com/laodang/p/9394983.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!