码迷,mamicode.com
首页 > 其他好文 > 详细

文件下载

时间:2018-07-31 13:37:57      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:ati   firefox   ace   ext   load   row   文件下载   isp   output   

//接收参数并解决乱码
        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);
        }
    }

 

文件下载

标签:ati   firefox   ace   ext   load   row   文件下载   isp   output   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!