版本:webwork2.2.5
配置:
1.webwork.properties的配置:
webwork.i18n.encoding=GBK
webwork.multipart.parser=jakarta
webwork.multipart.saveDir=d:/temp
2.xwork.xml的配置:
<package name="default" extends="webwork-default"> <interceptors> <interceptor name="upload" class="com.opensymphony.webwork.interceptor.FileUploadInterceptor"/> <interceptor-stack name="vxStack"> <interceptor-ref name="params" /> <interceptor-ref name="model-driven" /> <interceptor-ref name="upload"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <global-results> <result name="exception" type="dispatcher">/error.jsp</result> <result name="resetPassword" type="dispatcher">/resetPassword.jsp</result> </global-results> </package>
3.config.properties的配置:
#windows
saveDir=d:/upload/
4.uploadFile.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>webwork上传单个文件</title>
</head>
<body>
<form name="form1" method="post" enctype="multipart/form-data" action="member/upload.do">
<input type="file" name="file"><input type="submit" value="上传">
</form>
</body>
</html>
5.uploadAction.java
package com.luodada.trans.soa.busi.web;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ResourceBundle;
import com.opensymphony.xwork.ActionSupport;
public class UploadAction extends ActionSupport {
private String fileFileName;
private File file;
public String uploadFile() {
upload();
return "succ";
}
// 上传文件
private void upload() {
if(file!=null) {
FileOutputStream outputStream;
try{
ResourceBundle rb = ResourceBundle.getBundle("config");
String fileDir = rb.getString("saveDir") + File.separator;
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String time = df.format(date);
fileFileName = time + "_" + fileFileName;
String filePath = fileDir + fileFileName;
try {
// 创建目录
File f = new File(fileDir);
f.mkdirs();
} catch (Exception ex) {
ex.printStackTrace();
}
outputStream = new FileOutputStream(filePath);
FileInputStream fileIn = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len;
while ((len = fileIn.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
fileIn.close();
outputStream.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.println("uploadfile name="+fileFileName);
} else {
System.out.println("file is null!");
}
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileName) {
this.fileFileName = fileName;
}
}
6.xwork-config.xml的配置
<!-- 上传文件 --> <action name="upload" class="uploadAction" method="uploadFile"> <interceptor-ref name="fileUpload" /> <interceptor-ref name="defaultStack" /> <result name="succ">/upload/uploadFileSucc.jsp</result> </action>
注意事项:
1.<form>表单中要加上属性 enctype="multipart/form-data"
2.xwork-config.xml中要配置<interceptor-ref name="fileUpload" />和<interceptor-ref name="defaultStack" />
3.xwork-config.xml中要添加method="**"的属性
4.webwork上传文件只是暂时存放在一个文件夹等待action里处理,处理完毕就会删除临时文件,所以在action里一定要自行对文件进行处理,不能指望它自动保存,因此在 upload()函数里保存了一次。
5.webwork.multipart.parser是设置处理上传的类的,有jakarta、cos、pell 三种设置, jakarta是默认的设置;注意设置了相应的类要把相应的jar放进来(jakarta支持多文件上传,cos和pell不支持);