struts2里面的文件上传,是将文件上传到发布工作空间中。
第一步: 新建jsp页面
<p>文件上传</p>
<!-- action:提交地址 method:提交方式,文件上传时提交方式一定要post enctype:表单类型-->
<!-- multipart/form-data:是不对字符编码。使用包含文件上传控件的表单时,必须使用该值。-->
<form action="testAction_loadFile.action" method="post" enctype="multipart/form-data">
<input type="file" name="fname"/>
<input type="submit" value="上传"/>
</form>
第二步:写文件上传的方法
package com.ystruts.action;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport{
//这两个属性必须要定义,也要提供get,set方法
private File fname;//名称和页面上文件框的name名一致
private String fnameFileName;//这里的命名是页面上文件框的name名+FileName,这是规范
@SuppressWarnings("deprecation")
public String loadFile() {
//获取到request对象
HttpServletRequest request=ServletActionContext.getRequest();
//获取到项目的真实路径,也就是项目的发布路径
String path = request.getRealPath("/images");
//这里是给上传的文件夹重命名,防止重名。以时间的方式重命名
String extName=fileNameFileName.substring(fileNameFileName.lastIndexOf('.'));
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmssSSSS");
String filename = sdf.format(new Date());
//拼接了路径和新的文件名,放到一个文件对象中
File file=new File(path+"/"+filename+extName);
try {
//使用struts的帮助类复制文件
FileUtils.copyFile(fileName, file);
} catch (IOException e) {
e.printStackTrace();
}
return "sc";
}
}
```