给表单form设置属性:enctype="multipart/form-data",为了保证file文件内容能正常传递。
注意保持表单中的action名称与struts.xml中设置的一致,为了保证通过配置文件能够找到处理表单action类。
在struts.xml应设置常量<constant name="struts.multipart.saveDir" value="/tmp">。这是因为文件上传时在内存中需要一个临时存储该文件内容的地方也即"/tmp"只是个临时中转站。若没有配置该常量,后台会报not found struts.multipart.saveDir"错。
因为上传的文件是存储在服务器下的(我这里是将文件保存在web应用目录upload文件下),因此事先必须先创建upload文件否则出现无法找到相应路径异常。
相关代码:jsp页面
<form action="Upload" method="post" enctype="multipart/form-data">
<table>
<tr> <td>上传文件:<input type="file" name="file"></td></tr>
<tr><td><input type="submit" value="上传"/></td></tr>
</table>
</form>
struts.xml配置文件
<package name="default" extends="struts-default">
<action name="Upload" class="com.action.UploadAction">
<result name="success">/successUpload.jsp</result>
</action>
</package>
处理上传文件类UploadAction
package com.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private File file;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
private String fileFileName;
private String fileContentType;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
InputStream inputStream = new FileInputStream(this.getFile());
String path = ServletActionContext.getServletContext().getRealPath("/upload");
System.out.println("获得的路径为:"+path);
OutputStream outputStream = new FileOutputStream(new File(path,fileFileName));
byte buffer[] = new byte[1024];
int length = 0;
while((length=inputStream.read(buffer))>0){
outputStream.write(buffer,0,length);
}
outputStream.close();
inputStream.close();
return SUCCESS;
}
}
验证文件是否上传成功:successUpload.jsp页面
<body>
上传文件名:${fileFileName} <br/>
上传文件类型:${fileContentType}
</body>