zoukankan      html  css  js  c++  java
  • struts 文件上传下载

    上传

    1、编写上传action类 UploadAction.java

     1 package jxf.b_upload;
     2 
     3 import java.io.File;
     4 import java.io.IOException;
     5 
     6 import javax.servlet.http.HttpServletRequest;
     7 
     8 import org.apache.commons.io.FileUtils;
     9 import org.apache.struts2.ServletActionContext;
    10 
    11 public class UploadAction {
    12     public File file01;//上传的文件  --对应表单中的<input type="file" name="file01"> name的值
    13     public String file01FileName;//上传文件的文件名    --表单中name的值+FileName
    14     public String file01ContentType;// 上传文件的文件的类型(MIME) --表单中name的值+ContentType
    15     
    16     public void setFile01(File file01) {
    17         this.file01 = file01;
    18     }
    19 
    20     public void setFile01FileName(String file01FileName) {
    21         this.file01FileName = file01FileName;
    22     }
    23 
    24     public void setFileContentType(String file01ContentType) {
    25         this.file01ContentType = file01ContentType;
    26     }
    27 
    28     /**
    29      * 上传
    30      * @return
    31      */
    32     public String upload() {
    33         //处理文件   把文件上传到upload目录
    34         try {
    35             //创建目标文件  
    36             File destFile = new File(ServletActionContext.getServletContext().getRealPath("/upload"),file01FileName);
    37             //拷贝上传的文件到目标文件
    38             FileUtils.copyFile(file01, destFile);
    39             System.out.println("上传完成");
    40         } catch (IOException e) {
    41             e.printStackTrace();
    42             throw new RuntimeException(e);
    43         }
    44         return "success";
    45     }
    46 }

    2、配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <!-- struts默认的上传文件大小限制是2M,可通过常量的配置来改变 -->
        <constant name="struts.multipart.maxSize" value="10485760"></constant>
        <package name="upload_" extends="struts-default">
            <action name="uploadTest" class="jxf.b_upload.UploadAction" method="upload">
                <!-- 限制运行上传的文件的类型 -->
                <interceptor-ref name="defaultStack">
                    <!-- 限制运行的文件的扩展名
                    <param name="fileUpload.allowedExtensions">txt,jpg,jar</param>
                     -->
                    <!-- 限制运行的类型   【与上面同时使用,取交集】
                    <param name="fileUpload.allowedTypes">text/plain</param>
                    -->
                </interceptor-ref>
                <!-- 错误视图 -->
                <result name="input">/error.jsp</result>
                <result name="success">/index.jsp</result>
            </action>
        </package>
    </struts>

    3、前台jsp页面

      <body>
        <form action="${pageContext.request.contextPath}/uploadTest" method="post" enctype="multipart/form-data">
            <input type="file" name="file01">
            <input type="submit" value="上传">
        </form>
      </body>

    如果是多文件上传,可以使用同名的<input type="file" name="">标签,并在action处理类中用数组接收(当然也可以用不同的name值,并用对应的字段接收),然后遍历处理

     1 public class UploadAction {
     2     public File[] file01;//上传的文件  --对应表单中的<input type="file" name="file01"> name的值
     3     public String[] file01FileName;//上传文件的文件名    --表单中name的值+FileName
     4     public String[] file01ContentType;// 上传文件的文件的类型(MIME) --表单中name的值+ContentType
     5     
     6     public void setFile01(File[] file01) {
     7         this.file01 = file01;
     8     }
     9 
    10     public void setFile01FileName(String[] file01FileName) {
    11         this.file01FileName = file01FileName;
    12     }
    13 
    14     public void setFileContentType(String[] file01ContentType) {
    15         this.file01ContentType = file01ContentType;
    16     }
    17
    18     /**
    19      * 上传
    20      * @return
    21      */
    22     public String upload() {
    23         //处理文件   把文件上传到upload目录
    24         try {
    25             //创建目标文件  
    26             for (int i = 0; i < file01.length; i++) {
    27                 File destFile = new File(ServletActionContext.getServletContext().getRealPath("/upload"),file01FileName[i]);
    28                 //拷贝上传的文件到目标文件
    29                 FileUtils.copyFile(file01[i], destFile);
    30                 System.out.println("上传完成");
    31             }
    32             
    33         } catch (IOException e) {
    34             e.printStackTrace();
    35             throw new RuntimeException(e);
    36         }
    37         return "success";
    38     }
    39 }
    <form action="${pageContext.request.contextPath}/uploadTest" method="post" enctype="multipart/form-data">
            <input type="file" name="file01">
            <input type="file" name="file01">
            <input type="file" name="file01">
            <input type="submit" value="上传">
        </form>

    下载:

    1、编写下载acton类 DownAction.java

     1 package jxf.b_upload;
     2 
     3 import java.io.File;
     4 import java.io.InputStream;
     5 import java.io.UnsupportedEncodingException;
     6 import java.net.URLEncoder;
     7 import java.util.Map;
     8 
     9 import org.apache.struts2.ServletActionContext;
    10 
    11 import com.opensymphony.xwork2.ActionContext;
    12 
    13 public class DownAction {
    14 
    15     /**
    16      * 1. 显示所有要下载文件的列表
    17      * @return
    18      */
    19     public String list(){
    20         //获取所有要下载的文件
    21         File file = new File(ServletActionContext.getServletContext().getRealPath("/upload"));
    22         String[] fileNames = file.list();//所有文件名
    23         ActionContext ac =  ActionContext.getContext();
    24         Map<String,Object> request = ac.getContextMap();
    25         request.put("fileNames", fileNames);//将文件名放入request
    26         return "list";
    27     }
    28     
    29     /*************2. 文件下载*********************/
    30     // 1. 获取要下载的文件的文件名
    31     private String fileName;//对应提交的参数名
    32     public void setFileName(String fileName) {
    33         // 处理传入的参数中问题(get提交)
    34         try {
    35             fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
    36         } catch (UnsupportedEncodingException e) {
    37             throw new RuntimeException(e);
    38         }
    39         // 把处理好的文件名,赋值
    40         this.fileName = fileName;
    41     }
    42     
    43     //2. 下载提交的业务方法 (在struts.xml中配置返回stream)
    44     public String down() throws Exception {
    45         return "success";
    46     }
    47     
    48     // 3. 返回文件流的方法
    49     public InputStream getAttrInputStream(){
    50         return ServletActionContext.getServletContext().getResourceAsStream("/upload/" + fileName);
    51     }
    52     
    53     // 4. 下载显示的文件名(浏览器显示的文件名)
    54     public String getDownFileName() {
    55         // 需要进行中文编码
    56         try {
    57             fileName = URLEncoder.encode(fileName, "UTF-8");
    58         } catch (UnsupportedEncodingException e) {
    59             throw new RuntimeException(e);
    60         }
    61         return fileName;
    62     }
    63     
    64 }

    2、配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package name="down_" extends="struts-default">
            <action name="downlist" class="jxf.b_upload.DownAction" method="list">
                <result name="list">/down.jsp</result>
            </action>
            <action name="down_down" class="jxf.b_upload.DownAction" method="down">
                <result name="success" type="stream">
                   <!-- 运行下载的文件的类型:指定为所有的二进制文件类型 -->
                   <param name="contentType">application/octet-stream</param>
                   <!-- 对应的是Action中属性: 返回流的属性【其实就是getAttrInputStream()】 -->
                   <param name="inputName">attrInputStream</param>
                   <!-- 下载头,包括:浏览器显示的文件名  ${downFileName},${}为struts中的取值符,downFileName对应getDownFileName()-->
                   <param name="contentDisposition">attachment;filename=${downFileName}</param>
                   <!-- 缓冲区大小设置 -->
                   <param name="bufferSize">1024</param>
                </result>
            </action>
        </package>
    </struts>

    3、下载列表jsp

      <body>
        <table border="1" align="center">
            <tr>
                <td>序号</td>
                <td>文件名</td>
                <td>操作</td>
            </tr>
            <c:forEach var="item" items="${fileNames}" varStatus="sta">
                <tr>
                    <td>${sta.count}</td>
                    <td>${item}</td>
                    <td>
                        <c:url var="url" value="down_down">
                            <c:param name="fileName" value="${item}"></c:param>
                        </c:url>
                        <a href="${url}">下载</a>
                    </td>
                </tr>
            </c:forEach>
        </table>
      </body>

    下载编写方式比较特殊,并不容易记忆,此处记录方便以后用到查阅。

  • 相关阅读:
    MDX Step by Step 读书笔记(六) Building Complex Sets (复杂集合的处理) Filtering Sets
    在 Visual Studio 2012 开发 SSIS,SSAS,SSRS BI 项目
    微软BI 之SSIS 系列 在 SSIS 中读取 SharePoint List
    MDX Step by Step 读书笔记(五) Working with Expressions (MDX 表达式) Infinite Recursion 和 SOLVE_ORDER 原理解析
    MDX Step by Step 读书笔记(五) Working with Expressions (MDX 表达式)
    使用 SQL Server 2012 Analysis Services Tabular Mode 表格建模 图文教程
    MDX Step by Step 读书笔记(四) Working with Sets (使用集合) Limiting Set and AutoExists
    SQL Server 2012 Analysis Services Tabular Model 读书笔记
    Microsoft SQL Server 2008 MDX Step by Step 学习笔记连载目录
    2011新的开始,介绍一下AgileEAS.NET平台在新的一年中的发展方向
  • 原文地址:https://www.cnblogs.com/fnz0/p/5979367.html
Copyright © 2011-2022 走看看