Struts2的文件上传:
在struts2-default中的默认配置文中,struts-default.xml,其中的defaultStack中,fileuploadinterceptor是默认的拦截器栈,所以在用户在客户端通过jsp页面请求服务器的Action时,就会通过这个fileuploadinterceptor拦截器,此时fileupload会将文件保存呢到指定的位置。但是其内部必须提供了相应的约束。
1、编写文件上传页面
1) 必须input type="file" 有name属性
2) form提交方式 必须采用 post方式
3) enctype="multipart/form-data"
* multipart/form-data 来自MIME协议
------------------------------------- 分隔线
username = 123
-------------------------------------
文件上传内容
-------------------------------------
public class FileUploadAction extends ActionSupport{
// 接收文件上传的数据
private File upload ; // 和页面中的file标签的name属性名字必须相同
private String uploadContentType ; // 上传文件的类型 “file标签name属性名+ContentType”
private String uploadFileName ; //上传文件的名称 “页面的file标签name属性名+FileName”
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;
}
public String execute() throws Exception {
System.out.println("文件上传、、、");
// 在web项目中 获得绝对路径
ServletContext context = ServletActionContext.getServletContext() ;
String uploadDir = context.getRealPath("/upload");
// 将文件写入到指定的目录
// 当经过默认拦截器的fileupInterceptor时候,已经将客户端要上传的文件上传到服务器的指定位置,文件的类型是File,要是想把文件保存到自己想保存的位置,
// 只需要用IO流将其封装(读取到流中,封装为InputStream),并用流写入到相应的目标位置即可。
InputStream in = new BufferedInputStream(new FileInputStream(upload));
OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(uploadDir,uploadFileName)));
byte[] b = new byte[1024];
int len = -1 ;
while(( len = in.read(b)) != -1){
out.write(b, 0, len);
}
in.close();
out.close();
return SUCCESS ;
}
}