struts.xml
<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts> <constant name="struts.custom.il8n.resources" value="message"></constant> <!-- 定义国际化方式,将struts2内置的验证提示方式覆盖掉 “message”为自己创建的文件,且必须在src根目录下 -->
<constant name="struts.i18n.encoding" value="gbk"></constant>
<constant name="struts.multipart.saveDir" value="f:\"></constant> <package name="struts2" extends="struts-default">

<interceptors>   <!-- 拦截器根节点 -->
<interceptor name="auth" class="interceptor.AuthInterceptor"></interceptor>  <!-- 定义一个拦截器 -->

<interceptor name="MethodFilterInterceptor" class="interceptor.MethodFilterInteceptor"></interceptor> <!-- 对指定方法进行拦截 -->


<interceptor-stack name="default">    <!-- 定义一个拦截器栈 -->
<interceptor-ref name="auth"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>  <!-- 引用继承下来的默认拦截器 -->
</interceptor-stack>


</interceptors>



<!-- <default-interceptor-ref name="default">  --> <!-- 定义一个默认的拦截器引用 -->

<!--</default-interceptor-ref>-->

<global-results> <!-- 定义一个全局的结果 -->
<result name="login" type="redirect">/login.jsp</result>  
</global-results>

<action name="login" class="com.action.LoginAction">
<result name="success">/register2.jsp</result>
<result name="input">/login.jsp</result>
<result name="false">/login.jsp</result>
</action>
<action name="pointConvert" class="com.action.PointAction">
<result name="success">/output.jsp</result>
</action>
<action name="register" class="com.action.RegisterAction" method="reg">   <!-- Action会调用“reg”这个方法 -->
<result name="success">/success.jsp</result>
<result name="input">/register2.jsp</result>

<interceptor-ref name="MethodFilterInterceptor">
<param name="includeMethods">text,execute</param> <!-- 对指定方法进行拦截 -->
<param name="excludeMethods">execute</param> <!-- 对指定方法不拦截 -->
</interceptor-ref>

<interceptor-ref name="auth"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>  <!-- 引用继承下来的默认拦截器 -->

<!-- 
<interceptor-ref name="auth"></interceptor-ref>  
<interceptor-ref name="defaultStack"></interceptor-ref>
 -->

</action>

<action name="upload" class="com.action.UploadAction">
<result name="success">/uploadfile/result.jsp</result>
<result name="input">/uploadfile/upload.jsp</result>

<interceptor-ref name="fileUpload">
<param name="maximumSize">409600</param>
<param name="allowedTypes">application/vnd.ms-powerpoint,text/plain</param>
</interceptor-ref>

<interceptor-ref name="defaultStack"></interceptor-ref>

</action>


<action name="download" class="com.action.DownloadAction">
<result name="success" type="stream">
<param name="contentType">text/plain</param>
<param name="contentDisposition">filename="text.txt"</param>
<param name="inputName">downloadFile</param>
</result>
</action>
</package>
</struts>

解决方案 »

  1.   

    UploadActionpackage com.action;import java.io.*;
    import java.util.List;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport {
    private String username;
    private List<File> file;
    private List<String> fileFileName;
    private List<String> fileContentType;
    public String getUsername() {
    return username;
    }
    public void setUsername(String username) {
    this.username = username;
    }
    public List<File> getFile() {
    return file;
    }
    public void setFile(List<File> file) {
    this.file = file;
    }
    public List<String> getFileFileName() {
    return fileFileName;
    }
    public void setFileFileName(List<String> fileFileName) {
    this.fileFileName = fileFileName;
    }
    public List<String> getFileContentType() {
    return fileContentType;
    }
    public void setFileContentType(List<String> fileContentType) {
    this.fileContentType = fileContentType;
    }
    @Override
    public String execute() throws Exception {
    for(int i = 0;i<file.size();i++){
    InputStream is = new FileInputStream(file.get(i));
    String path = ServletActionContext.getRequest().getRealPath("/");
    File file2 = new File(path,this.getFileFileName().get(i));
    OutputStream os = new FileOutputStream(file2);
    byte[] bu = new byte[400];
    int length = 0;
    while((length=is.read(bu))>0){
    os.write(bu, 0, length);
    }
    is.close();
    os.close();
    }


    return SUCCESS;
    }

    }
      

  2.   

    <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%><%@ taglib uri="/struts-tags" prefix="s" %><%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'upload.jsp' starting page</title>
        
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

    <script type="text/javascript">
    function add()
    {
    var td = document.getElementById("td");
    var br = document.createElement("br");
    var input = document.createElement("input");
    var button = document.createElement("input");

    input.type="file";
    input.name="file";

    button.type="button";
    button.value="remove";

    button.onclick=function()
    {
    td.removeChild(br);
    td.removeChild(input);
    td.removeChild(button);
    }

    td.appendChild(br);
    td.appendChild(input);
    td.appendChild(button);
    }
    </script>


      </head>
      
      <body>
        <s:form action="upload" enctype="multipart/form-data" theme="simple">
        <table>
         <tr>
           <td>
            <s:fielderror></s:fielderror>
           </td>
         </tr>
        </table>
        <table>
         <tr>
           <td>username:<s:textfield name="username"></s:textfield></td>
         </tr>
         <tr>
           <td id="td">file:<s:file name="file" ></s:file><input type="button" value="add more.." onclick="add()" /></td>
         </tr>
         <tr>
           <td><s:submit></s:submit></td>
         </tr>
        </table>
        </s:form>
      </body>
    </html>
      

  3.   

    太长 了 ,看起来蛋疼
    楼主如果假如单单是想实现struts的文件上传功能的话,我将代码发给你
    (留个邮箱!)