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:文件的输入流

  • 相关阅读:
    X、Y轴抖动的动画
    ViewFlipper的简单用法
    让手机连接到指定的WIFI网络,适用于之前已经连过的网络
    Eclipse 离线汉化的方法
    自己写的SeekBarPreference,可以实现seekbar滑动监听和设置默认进度和最大进度
    录制Android屏幕软件——屏幕录像专家
    【转】解决Android因加载多个大图引起的OutOfMemoryError,内存溢出的问题
    Java中的线程实现
    获得手机当前的ip地址
    操作Wifi的工具类
  • 原文地址:https://www.cnblogs.com/laodang/p/9394983.html
Copyright © 2011-2022 走看看