2014-10-08 37 views
1

嗨,我想上傳多個文件,如服務器上的一個Excel和兩個XML文件,但沒有結果定義的行動和結果輸入錯誤正在顯示。我正在使用struts2框架。如何解決沒有爲動作和結果輸入錯誤定義的結果?

我的jsp的頁面 -

<form action ="myInput" enctype="multipart/form-data" method="post" > 
<input type="file" name="fileUpload[]" /> 
<input type="file" name="fileUpload[]" /> 
<input type="file" name="fileUpload[]" /> 
<input type="submit" value="Upload Records" /> 
</form> 

我struts.xml-

<package name="links" extends="struts-default, json-default" namespace="/"> 
<action name="myInput" class="com.action.MyAction" > 
     <interceptor-ref name="linksAccessRequired"/> 

     <interceptor-ref name="fileUpload"> 
      <param name="allowedTypes">*/*</param> 
      <param name="maximumSize">10485760</param> <!-- 10MB --> 
     </interceptor-ref> 
     <interceptor-ref name="defaultStack" /> 

     <result name="success" type="json"/> 
     <result name="login" type="redirect">/</result> 
    </action> 
</package> 

我的行動文件 -

 import com.opensymphony.xwork2.Action; 
     import com.opensymphony.xwork2.ActionSupport; 

     import java.io.File; 
     import java.io.IOException; 

     import javax.servlet.http.HttpServletRequest; 
     import javax.servlet.http.HttpSession; 

     import org.apache.commons.io.FileUtils; 
     import org.apache.struts2.interceptor.ServletRequestAware; 

    public class MyAction extends ActionSupport implements ServletRequestAware { 
/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
private boolean result = false; 
private String status = null; 
private String msg = null; 

HttpServletRequest request = null; 

private File[] fileUpload; 
private String[] fileUploadFileName; 
private String[] fileUploadContentType; 

public File[] getFileUpload() { 
    return fileUpload; 
} 

public void setFileUpload(File[] fileUploads) { 
    this.fileUpload = fileUploads; 
} 

public String[] getFileUploadFileName() { 
    return fileUploadFileName; 
} 

public void setFileUploadFileName(String[] fileUploadFileNames) { 
    this.fileUploadFileName = fileUploadFileNames; 
} 

public String[] getFileUploadContentType() { 
    return fileUploadContentType; 
} 

public void setFileUploadContentType(String[] fileUploadContentTypes) { 
    this.fileUploadContentType = fileUploadContentTypes; 
} 

public String getStatus() { 
    return status; 
} 

public void setStatus(String status) { 
    this.status = status; 
} 

public String getMsg() { 
    return msg; 
} 

public void setMsg(String msg) { 
    this.msg = msg; 
} 

public String execute() { 
    System.out.println("Something"); 
    String saveDirectory = "/mypath/excels/Output/"+request.getSession().getAttribute("my")+"/myOut/"; 
    if(this.doUpload(fileUpload, saveDirectory)) 
    { 
     this.setStatus("Success"); 
     this.setMsg("Files have been upload successfully !"); 
    } 
    else 
    { 
     this.setStatus("Failled"); 
     this.setMsg("Files have not been upload successfully !"); 
    } 
    return Action.SUCCESS; 
} 
public boolean doUpload(File[] fileUpload, String saveDirectory) { 

    // copy the uploaded files into pre-configured location 
    for (int i = 0; i < fileUpload.length; i++) { 
     File uploadedFile = fileUpload[i]; 
     String fileName = fileUploadFileName[i]; 
     File destFile = new File(saveDirectory + File.separator + fileName); 
     try { 
      FileUtils.copyFile(uploadedFile, destFile); 
     } catch (IOException ex) { 
      System.out.println("Could not copy file " + fileName); 
      ex.printStackTrace(); 
     } 
    } 
    return true; 
} 

@Override 
public void setServletRequest(HttpServletRequest request) { 
    this.request = request; 
} 

}

爲什麼我得到沒有爲動作和結果輸入錯誤定義的結果? 請建議我解決這個問題。 感謝

+0

那麼添加一個'input'結果並在該頁面上顯示一條錯誤消息,您將看到原因。 – 2014-10-08 13:24:14

+0

@ Aleksandr M,添加輸入結果後仍然存在錯誤。 – user3860841 2014-10-08 13:28:29

+0

如果您添加了「輸入」結果,則錯誤應該不同。當然,真正的原因在於其他的東西,但在你遵循我的第一條評論之後,你會看到。 – 2014-10-09 08:27:01

回答

0
  1. 首先閱讀how INPUT result works,並正確地將添加一個到您的操作配置;

  2. 然後閱讀約how to upload multiple files in Struts2;

  3. 在這一點上,你應該能夠通過你自己去發現錯誤,那就是:

    <form action="myInput" enctype="multipart/form-data" method="post" > 
        <input type="file" name="fileUpload[]" /> 
        <input type="file" name="fileUpload[]" /> 
        <input type="file" name="fileUpload[]" /> 
        <input type="submit" value="Upload Records" /> 
    </form> 
    

    ,而應該是:

    <form action="myInput" enctype="multipart/form-data" method="post" > 
        <input type="file" name="fileUpload[0]" /> 
        <input type="file" name="fileUpload[1]" /> 
        <input type="file" name="fileUpload[2]" /> 
        <input type="submit" value="Upload Records" /> 
    </form> 
    

    甚至更​​好:

    <form action="myInput" enctype="multipart/form-data" method="post" > 
        <input type="file" name="fileUpload" multiple /> 
        <input type="submit" value="Upload Records" /> 
    </form> 
    

    使用Struts標籤的方法是:

    <s:form action="myInput" enctype="multipart/form-data" method="post" > 
        <s:file name="fileUpload" multiple /> 
        <s:submit value="Upload Records" /> 
    </s:form> 
    

端注:如果你有興趣知道如何在Struts2與dropzone.js進行多次上傳,this may be worth reading