提交页面就不贴了,都一样。在Action中,struts2会自动把上传的文件转为File对象,所以只需要从该对象读取流,写入到硬盘中即可。
package com.struts2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileUpload extends ActionSupport {
private String username;
//上传文件会自动转成File类型,所以原理简单,只要将file以流读取,写入到指定位置即可
private File file;
//文件名:字段名+FieName,如果用File对象的getName()方法,取到的是临时文件的文件名
private String fileFileName;
//文件类型:字段名+ContentType,返回MIME
private String fileContentType;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
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;
}
@Override
public String execute() throws Exception {
// 写入硬盘
String path=ServletActionContext.getRequest().getRealPath("/upload");
FileOutputStream fos=new FileOutputStream(new File(path,fileFileName));
FileInputStream fis=new FileInputStream(file);
byte[] bs=new byte[1024];
int len=0;
while((len=fis.read(bs,0,1024))>-1)
{
fos.write(bs, 0, len);
}
fis.close();
fos.close();
return SUCCESS;
}
}
如果是多文件上传,只需修改file,fileFileName,fileContentType类型为List(包括setter和getter方法),在execute方法中,循环保存文件即可。 默认情况下,只允许上传2M以内的文件,可以在struts.properties(src目录下)中添加一行:
struts.multipart.maxSize=104857600
允许上传100M,也可以在struts.xml中使用constant标签,name为struts.multipart.maxSize,value为104857600