struts2简化了文件上传的操作 ,简单几步即可实现文件上传
第一步:jsp页面
在jsp中的form如下:
<form action="${pageContext.request.contextPath}/fileUploadAction" method="post" enctype="multipart/form-data">
文 件:<input type="file" name="file1"><br/>
<input type="submit" name="上传"><br/>
</form>
注意两点:enctype=”multipart/form-data” 和 中的 name为“file1”,要与我们写的action中的属性名一样
第二步:action规范
其中 如下三个属性的命字是固定的
//对应表单:<input type="file" name="file1">
private File file1;
//文件名
private String file1FileName;
//文件的类型(MIME)
private String file1ContentType;
这三个属性的命名正确的话,struts就会进行自动封装,给这三个属性赋值(前提是这三个属性有set方法)
execute方法中进行文件复制操作:
@Override
public String execute() throws Exception
{
/*********** 对上传文件进行处理 ***********/
//把文件上传到upload目录
//1、获取上传的目录路径
String path=ServletActionContext.getServletContext().getRealPath("/upload");
//2、创建目标文件对象
File destFile=new File(path, file1FileName);
//3、把上传的文件,拷贝到目标文件中
FileUtils.copyFile(file1, destFile);
return SUCCESS;
}
上述代码会把上传的文件写出到upload文件夹中
第三步:配置struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="upload" extends="struts-default">
<action name="fileUploadAction" class="fileupload.FileUpLoad">
<result name="success">/e/success.jsp</result>
</action>
</package>
</struts>
都是一些最进本的配置没啥好说的
最后附上action类的完整代码:
package fileupload;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* @author 许湘扬 2017-5-22
* @邮箱 547139255@qq.com
* @说明 struts上传文件
*/
public class FileUpLoad extends ActionSupport
{
//对应表单:<input type="file" name="file1">
private File file1;
//文件名
private String file1FileName;
//文件的类型(MIME)
private String file1ContentType;
public void setFile1(File file1) {
this.file1 = file1;
}
public void setFile1FileName(String file1FileName) {
this.file1FileName = file1FileName;
}
public void setFile1ContentType(String file1ContentType) {
this.file1ContentType = file1ContentType;
}
@Override
public String execute() throws Exception
{
/*********** 对上传文件进行处理 ***********/
//把文件上传到upload目录
//1、获取上传的目录路径
String path=ServletActionContext.getServletContext().getRealPath("/upload");
//2、创建目标文件对象
File destFile=new File(path, file1FileName);
//3、把上传的文件,拷贝到目标文件中
FileUtils.copyFile(file1, destFile);
return SUCCESS;
}
}