Java FileNotFoundException-Struts2文件上载

Java FileNotFoundException-Struts2文件上载,java,jsp,struts2,Java,Jsp,Struts2,使用Struts2上传文件时出现奇怪的FileNotFoundException。这是JSP的一部分: <a:form action="/FileUploadServletAction.action" method="post" enctype="multipart/form-data"> <a:file name="fileUpload" label="File"/> <a:submit/> 这是struts.xml的我的部分,它配置了上面的操作类: &l

使用Struts2上传文件时出现奇怪的
FileNotFoundException
。这是JSP的一部分:

<a:form action="/FileUploadServletAction.action" method="post" enctype="multipart/form-data">
<a:file name="fileUpload" label="File"/>
<a:submit/>
这是struts.xml的我的部分,它配置了上面的操作类:

<action name="FileUploadServletAction"
        class="com.test.FileUploadServletAction">
        <result name="input">/jsp/upload.jsp</result>
        <result name="success">/jsp/upload.jsp</result>
        <result name="error">/jsp/error.jsp</result>
</action>
有人能告诉我为什么Struts找不到创建的临时文件吗?如果您需要更多信息,请告诉我。

请尝试使用inteceptor 你的行动应该是这样的

 <action name="FileUploadServletAction"  class="com.test.FileUploadServletAction">
            <interceptor-ref name="fileUpload">
                <param name="maximunSize">1024000</param>
                <param name="allowedTypes">
                     your types
                </param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="input">/jsp/upload.jsp</result>
            <result name="success">/jsp/upload.jsp</result>
            <result name="error">/jsp/error.jsp</result>
    </action>

1024000
你的类型
/jsp/upload.jsp
/jsp/upload.jsp
/jsp/error.jsp

我认为您缺少getter和setter方法,我不知道您是否定义了getter和setter方法

JSP代码:

<form action="FileUploadServletAction" method="post" enctype="multipart/form-data">
  <label>File:</label><input type="file" name="userKey"/>
  <input type="image" src="images/login-btn.jpg" alt="submit" width="103" height="42"/>
</form>  
//In FileUploadServletAction
private File userKey;  //file name which is on JSP
private String userKeyContentType;
private String userKeyFileName;  

//getter, setter  
public File getUserKey() 
{
    return userKey;
}

public void setUserKey(File userKey) 
{
    this.userKey = userKey;
}

public String getUserKeyFileName()
{
    return userKeyFileName;
} 

public String getUserKeyContentType() 
{
    return userKeyContentType;
}

public void setUserKeyContentType(String userKeyContentType)
{
    this.userKeyContentType = userKeyContentType;
}

public void setUserKeyFileName(String userKeyFileName)
{
    this.userKeyFileName = userKeyFileName;
}  
现在,
execute()
方法

//In FileUploadServletAction
public String execute() throws Exception{
 try {
      String filePath = request.getSession().getServletContext().getRealPath("/");           
      File fileToCreate = new File(filePath, this.userKeyFileName);
      FileUtils.copyFile(this.userKey, fileToCreate);
  } catch (Exception e) {
    e.printStackTrace();
    addActionError(e.getMessage());
    return INPUT;
 }

 return SUCCESS;
} 

为了简单起见,我已经配置了这个,我在帖子中没有提到。但我还是遇到了相同的异常。请尝试以下字符串path=httpServletRequest.getSession().getServletContext().getRealPath(“/”);。创建HttpServletRequest对象及其getter、setter。这就是找不到文件的原因。如果您想要自定义路径,请在web.xmlAdded中说明,但问题仍然相同。链接到my action类:,web.xml:,struts.xml:。因为我不能在这里发布完整的文件。是的,我在fileUpload中获得了正确的对象。它正在显示临时文件的路径。您好@Aniket,是的,我已经为所有字段定义了getter/setter。@PradeepSimha:您能试试我的代码吗?我也有同样的要求,我根据你的帖子编辑了我的代码。它对我有用。
//In FileUploadServletAction
private File userKey;  //file name which is on JSP
private String userKeyContentType;
private String userKeyFileName;  

//getter, setter  
public File getUserKey() 
{
    return userKey;
}

public void setUserKey(File userKey) 
{
    this.userKey = userKey;
}

public String getUserKeyFileName()
{
    return userKeyFileName;
} 

public String getUserKeyContentType() 
{
    return userKeyContentType;
}

public void setUserKeyContentType(String userKeyContentType)
{
    this.userKeyContentType = userKeyContentType;
}

public void setUserKeyFileName(String userKeyFileName)
{
    this.userKeyFileName = userKeyFileName;
}  
//In FileUploadServletAction
public String execute() throws Exception{
 try {
      String filePath = request.getSession().getServletContext().getRealPath("/");           
      File fileToCreate = new File(filePath, this.userKeyFileName);
      FileUtils.copyFile(this.userKey, fileToCreate);
  } catch (Exception e) {
    e.printStackTrace();
    addActionError(e.getMessage());
    return INPUT;
 }

 return SUCCESS;
}