Java FileNotFoundException-Struts2文件上载
使用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
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;
}