zoukankan      html  css  js  c++  java
  • struts2框架之文件下载(参考第三天学习笔记)

    下载

    1. 下载是一种响应方式
      正常的响应:响应正文是html:response.getWriter().print("html");
    下载的响应:
      1.一个流:字节数据:response.getOutputStream().write(文件的内容,即一些字节数据);
    2.response.setContentType("image/jpeg");
    3. response.setHeader("Content-disposition", "attachment;filename=xxx");

    2. Struts下载
    Struts2中的响应由Result来完成,所以我们需要配置一种特殊类型的<reuslt>

    1). 配置<result type="stream">,其中stream说明了当前结果为下载。
    2). 需要为结果配置两个头,一个流!

    <param name="contentType">image/jpeg</param>
    <param name="contentDisposition">attachment;filename=a.jpg</param>
    <!--
    结果会得到Action的类型为InputStream属性的名称!
    结果得到名称之后,通过名称来调用get方法得到流对象。
    -->
    <param name="inputName">inputStream</param>

    必须为Action提供一个InputStream类型的属性,必须提供get方法
    需要给<result>配置属性名称参数,而不是流对象本身

    下载附件名乱码解决

        /**
         * 下载文件时,针对不同浏览器,进行附件名的编码
         * @param filename 下载文件名
         * @param agent 客户端浏览器
         * @return 编码后的下载附件名
         * @throws IOException
         */
        public String encodeDownloadFilename(String filename, String agent) throws IOException{
            if(agent.contains("Firefox")){ // 火狐浏览器
                filename = "=?UTF-8?B?"+new BASE64Encoder().encode(filename.getBytes("utf-8"))+"?=";
            }else{ // IE及其他浏览器
                filename = URLEncoder.encode(filename,"utf-8");
            }
            return filename;
        }

       

  • 相关阅读:
    python-Lock进程同步解决互斥
    python-Event事件处理进程同步
    python-queue队列通信
    python-无名管道进程通信
    python-signal
    python-购物车
    python-多进程类封装
    python-哈夫曼树
    python-双向链表
    openstack 开发step-by-step
  • 原文地址:https://www.cnblogs.com/xyhero/p/9348788.html
Copyright © 2011-2022 走看看