1>, 在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar。这两个文件可以从http://commons.apache.org/下载。
2>, 把form表的enctype设置为:“multipart/form-data“,如下:
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>My JSP ‘index.jsp‘ starting page</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/upload/uploadAction_saveFile.action"
name="form1" method="post" enctype="multipart/form-data" >
上传文件名称:<input type="file" name="uploadImage"><!--name名称要与Action中定义的字段对应-->
<input type="submit" value="上传">
</form>
</body>
</html>
3>, 在Action类中添加以下属性,属性红色部分对应表单文件字段的名称:
private File uploadImage; //得到上传的文件
private String uploadImageContentType; //得到文件的类型
private String uploadImageFileName; //得到文件的名称
代码:
import java.io.File;
import javax.servlet.ServletContext;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class UploadAction extends ActionSupport {
//<input type="file" name="uploadImage">
/*
* * 保存上传的文件,此时是一个临时文件,保存在如下的目录
* E:\\apache-tomcat-6.0.18\\work\\Catalina\\localhost\\itcast0902struts2
* \\upload__58d71e4b_1322cf0eaeb__7fff_00000000.tmp
*
* * 当请求结束时,再删除该临时文件
* Removing file uploadImage E:\\apache-tomcat-6.0.18\work\Catalina\localhost\itcast0902struts2
* \\upload__39b4493b_1322cfa9c5d__8000_00000000.tmp
*/
private File uploadImage;
//保存的是上传文件的类型 格式:htm上传表单的组件的name属性的值+ContentType
private String uploadImageContentType;
//保存上传文件的真实名称 格式:htm上传表单的组件的name属性的值+FileName
private String uploadImageFileName;
public String saveFile(){
System.err.println("uploadImage "+uploadImage);
System.out.println("uploadImageContentType "+uploadImageContentType);
System.out.println("uploadImageFileName "+uploadImageFileName);
ServletContext sc=ServletActionContext.getServletContext();
String realpath=sc.getRealPath("/pic");
try {
//保存上传的文件到指定的目录
File file=new File(realpath,uploadImageFileName);
FileUtils.copyFile(uploadImage, file);
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
public File getUploadImage() {
return uploadImage;
}
public void setUploadImage(File uploadImage) {
this.uploadImage = uploadImage;
}
public String getUploadImageContentType() {
return uploadImageContentType;
}
public void setUploadImageContentType(String uploadImageContentType) {
this.uploadImageContentType = uploadImageContentType;
}
public String getUploadImageFileName() {
return uploadImageFileName;
}
public void setUploadImageFileName(String uploadImageFileName) {
this.uploadImageFileName = uploadImageFileName;
}
}
在struts.xml文件中配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!--修改上传文件大小的总开关,默认值是2M,对整个项目中的上传都有效 -->
<constant name="struts.multipart.maxSize" value="200097152"></constant>
<package name="upload" namespace="/upload" extends="struts-default">
<action name="uploadAction_*" class="cn.yujian.upload.UploadAction" method="{1}">
<!-- 配置默认栈中上传拦截器的属性 -->
<interceptor-ref name="defaultStack">
<!-- 配置上传文件的大小,只对当前的action有效 -->
<param name="fileUpload.maximumSize">3097152</param>
<!-- 配置上传文件的类型,如果有多个类型,中间用,隔开 -->
<param name="fileUpload.allowedTypes">text/plain,application/octet-stream</param>
<!-- 配置上传文件的扩展名,如果有多个扩展名,中间用,隔开-->
<param name="fileUpload.allowedExtensions">txt,xls</param>
</interceptor-ref>
<result name="success">/upload/success.jsp</result>
<!-- 当上传失败时,要转下input所指向的页面 -->
<result name="input">/upload/error.jsp</result>
</action>
</package>
</struts>
1,form表单代码:
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>My JSP ‘index.jsp‘ starting page</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/upload/uploadsAction_saveFiles.action"
name="form1" method="post" enctype="multipart/form-data" >
上传文件名称:<input type="file" name="uploadImages"><br>
上传文件名称:<input type="file" name="uploadImages"><br>
上传文件名称:<input type="file" name="uploadImages"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
2,Action代码:
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletContext;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class UploadsAction extends ActionSupport {
private File[] uploadImages;
private String[] uploadImagesContentType;
private String[] uploadImagesFileName;
public String saveFiles() {
ServletContext sc=ServletActionContext.getServletContext();
String realpath=sc.getRealPath("/pic");
try {
if(uploadImages!=null&&uploadImages.length>0){
for(int i=0;i<uploadImages.length;i++){
File file=new File(realpath,uploadImagesFileName[i]);
FileUtils.copyFile(uploadImages[i], file);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
public File[] getUploadImages() {
return uploadImages;
}
public void setUploadImages(File[] uploadImages) {
this.uploadImages = uploadImages;
}
public String[] getUploadImagesContentType() {
return uploadImagesContentType;
}
public void setUploadImagesContentType(String[] uploadImagesContentType) {
this.uploadImagesContentType = uploadImagesContentType;
}
public String[] getUploadImagesFileName() {
return uploadImagesFileName;
}
public void setUploadImagesFileName(String[] uploadImagesFileName) {
this.uploadImagesFileName = uploadImagesFileName;
}
}
3,struts.xml中配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!--修改上传文件大小的总开关,默认值是2M,对整个项目中的上传都有效 -->
<constant name="struts.multipart.maxSize" value="200097152"></constant>
<package name="upload" namespace="/upload" extends="struts-default">
<!-- 配置多文件上传 -->
<action name="uploadsAction_*" class="cn.yujian.upload.UploadsAction" method="{1}">
<result name="success">/upload/success.jsp</result>
<result name="input">/upload/error.jsp</result>
</action>
</package>
</struts>
1>, 创建新的资源文件,例如fileupload.properties,放置在src下
2> ,在资源文件中增加:
struts.messages.error.uploading=上传错误: {0}
struts.messages.error.file.extension.not.allowed=上传文件的扩展名不允许: {0} "{1}" "{2}" {3}
struts.messages.error.file.too.large=上传文件太大: {0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed=上传文件的类型不允许: {0} "{1}" "{2}" {3}
3>,在struts.xml文件中加载该资源文件:
<!-- 配置加载国际化的资源文件, .properties不用加,如果有多个资源文件,用","隔开
* cn.yujian.upload.fileupload:加载的是fileupload.properties资源文件
* cn.yujian.i18n.resource:加载的resource系列的资源文件
-->
<constant name="struts.custom.i18n.resources"
value="cn.yujian.upload.fileupload>
</constant>
原文:http://my.oschina.net/u/936286/blog/357182