• struts的文件下载


    一、jsp

     <body>
         <table border="1" align="center">
             <tr>
                 <td>编号</td>
                 <td>文件名</td>
                 <td>操作</td>
             </tr>
             <c:forEach var="fileName" items="${fileNames}" varStatus="vs">
                 <tr>
                     <td>${vs.count}</td>
                     <td>${fileName}</td>
                     <td>
                         <!-- 构建一个url -->
                         <c:url var="url" value="down_down">
                             <c:param name="fileName" value="${fileName}"></c:param>
                         </c:url>
                         <a href="${url}">下载</a>
                     </td>
                 </tr>
             </c:forEach>
         </table>
      </body>

    二、DownAction.java

    /****************第二步:文件下载**********************/
        //1、获取下载的名字
        private String fileName;
        private void SetFileName(String fileName) {
            //传入中文,处理乱码问题
            try {
                fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
            this.fileName=fileName;
        }
        
        //2.下载提交的业务方法(在struts.xml中配置返回stream)
        public String down() {
            return "download";
        }
        
        //3.返回流的方法
        public InputStream getAttrInputStream(){
            return ServletActionContext.getServletContext().getResourceAsStream("/upload/" + fileName);
        }
        
        //4.下载显示的文件名
        public String getDownFileName() {
            //告诉浏览器编码格式
            try {
                fileName = URLEncoder.encode(fileName,"UTF-8");
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
            return fileName;
        }

    三、

    <action name="down_*" class="cn.itcast.e_fileupload.DownAction" method="{1}">
                <result name="list">/e/list.jsp</result>
                <!-- 下载操作 -->
                <result name="download" type="stream">
                    <!-- 运行下载的文件类型:指定为所有的二进制文件类型 -->
                    <param name="contentType">application/octet-stream</param>
                    <!-- 对应的Action中的属性:返回流的属性【其实就是getAttrInputStream()】 -->
                       <param name="inputName">attrInputStream</param>
                       <!-- 下载头:包括浏览器显示的文件名 -->
                       <param name="contentDisposition">attachment;filename=${downFileName}</param>
                       <!-- 缓冲区设置 -->
                       <param name="bufferSize">1024</param>
                </result>
            </action>
  • 相关阅读:
    190401装饰器-高阶函数-闭包
    190329迭代器-生成器-三元运算-列表解析
    OpenStack-Mitaka
    RabbitMQ
    190328文件处理
    190322函数
    190322字符串
    190321集合
    190320运算符&数据类型
    Zookeeper
  • 原文地址:https://www.cnblogs.com/h-g-f-s123/p/6359164.html
Copyright © 2020-2023  润新知