如题,
前台页面源码如下:
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
  <head>
  </head> 
  <body>
  <form action="upload.action" method="post" enctype="multipart/form-data">
  文件标题:<input type="text" name="title"/><br>
  选择文件:<input type="file" name="upload"/><br>
  <input value="上传" type="submit">
  </form>
  </body>
</html>
初始代码如下:
package iss;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")
public class FileUploadAction extends ActionSupport {
private String title;
private File upload;
private String uploadContentType;
private String uploadFileName;
private String savePath; public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public File getUpload() {
return upload;
} public void setUpload(File upload) {
this.upload = upload;
} public String getUploadContentType() {
return uploadContentType;
} public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
} public String getUploadFileName() {
return uploadFileName;
} public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
} @SuppressWarnings("deprecation")
public String getSavePath() throws Exception {
return ServletActionContext.getRequest().getRealPath(savePath);
} public void setSavePath(String savePath) {
this.savePath = savePath;
} public String execute() throws Exception {
FileOutputStream fos;
fos = new FileOutputStream(new File(getSavePath() + "\\"
+ getUploadFileName()));
System.out.println("存储路径文件名:" + getUploadFileName() + "临时文件:"
+ getUpload());
FileInputStream fis = new FileInputStream(getUpload());
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
fis.close();
return SUCCESS;
}
}
出现的异常如下:
2009-5-31 20:43:52 org.apache.struts2.dispatcher.Dispatcher getSaveDir
信息: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir
2009-5-31 20:43:53 com.opensymphony.xwork2.validator.ActionValidatorManagerFactory <clinit>
信息: Detected AnnotationActionValidatorManager, initializing it...
存储路径文件名:2.txt临时文件:F:\apache-tomcat-6.0.18\work\Catalina\localhost\Struts2FileUpload\upload_7eaf9265_121967f32c7__7ff5_00000001.tmp
2009-5-31 20:43:53 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
java.io.FileNotFoundException: F:\apache-tomcat-6.0.18\work\Catalina\localhost\Struts2FileUpload\upload_7eaf9265_121967f32c7__7ff5_00000001.tmp (系统找不到指定的文件。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at iss.FileUploadAction.execute(FileUploadAction.java:66)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        .............................................................//是Java底层的错误
对异常处理后如下:
Action如下:
package iss;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")
public class FileUploadAction extends ActionSupport {
private String title;
private File upload;
private String uploadContentType;
private String uploadFileName;
private String savePath; public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public File getUpload() {
return upload;
} public void setUpload(File upload) {
this.upload = upload;
} public String getUploadContentType() {
return uploadContentType;
} public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
} public String getUploadFileName() {
return uploadFileName;
} public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
} @SuppressWarnings("deprecation")
public String getSavePath() throws Exception {
return ServletActionContext.getRequest().getRealPath(savePath);
} public void setSavePath(String savePath) {
this.savePath = savePath;
} public String execute() throws Exception {
FileOutputStream fos;
try {
fos = new FileOutputStream(new File(getSavePath() + "\\"
+ getUploadFileName())); System.out.println("存储路径文件名:" + getUploadFileName() + "临时文件:"
+ getUpload());
FileInputStream fis = new FileInputStream(getUpload());
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
fis.close();
} catch (FileNotFoundException e) {
System.out.println("上传文件为0字节");
}
return SUCCESS;
}
}
我在前台上传了,几个文件,当文件大于0个字节时,没有任何问题,但当文件等于0个字节时就会报错控制台输出:
2009-5-31 20:35:20 org.apache.struts2.dispatcher.Dispatcher getSaveDir
信息: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir
存储路径文件名:2.txt临时文件:F:\apache-tomcat-6.0.18\work\Catalina\localhost\Struts2FileUpload\upload_7eaf9265_121967f32c7__7ff6_00000007.tmp
上传文件为0字节
2009-5-31 20:35:21 org.apache.struts2.interceptor.FileUploadInterceptor intercept
信息: Removing file upload F:\apache-tomcat-6.0.18
\work\Catalina\localhost\Struts2FileUpload\upload_7eaf9265_121967f32c7__7ff6_00000007.tmp
-----------------------------------------------------------------------------------------------
有上可知Struts2实创建了F:\apache-tomcat-6.0.18\work\Catalina\localhost\Struts2FileUpload\upload_7eaf9265_121967f32c7__7ff6_00000007.tmp(所有的临时文件在该路径下找不到,应该是Struts2放在内存中了),为什么后边就找不到了,如果我处理了错误,他竟然又找到了这个文件,并且还移除了,看起来很假。不知哪位高手能帮我解释下原因,或者给出更好的解决方案,我在Google中已经找了,相关文章很少,还望高手给出答案。