struts2文件上传
使用struts2进行文件上传操作,struts2自身封装了一个文件上传jar包,并且设计实现了一个文件上传的拦截器FileUpload,该拦截器会将浏览器提交的File对象进行拦截,保存在临时目录中。用户通过设置拦截器参数,实现从临时目录到指定目录的文件迁移,且该拦截器是默认启动的。
实现
- 前端jsp页面的表单属性设置
enctype="multipart/form-data"。 - 配置文件struts.xml拦截器设置
<interceptor-ref name="defaultStack">
<param name="fileUpload.allowedExtensions">jpg, jpeg, png</param>
</interceptor-ref>
有多种类型只需要加逗号分隔即可
- 定义接收的变量
private File upload;//前端上传框的name值
private String uploadContentType;//上传文件的mimeType类型
private String uploadFileName;//上传文件的名称
- 将文件复制到自定义目录
FileUtils.copyFile(upload, new File(ServletActionContext.getServletContext().getRealPath("/upload"), uploadFileName));
ServletActionContext.getServletContext().getRealPath("/upload")得到的是tomcat下该项目的发布路径,即E:\tomcat服务器\apache-tomcat-9.0.30\strut2demo\upload路径
可直接使用链接访问到该文件,如"http://localhost:8080/strut2demo(项目名)/upload(自定义接收文件的目录)/"+uploadFileName
代码示例
- 前端jsp
<s:form action="upfile" method="POST" enctype="multipart/form-data">
<s:textfield name="name" label="用户名"/>
<s:textfield name="password" label="密码"/>
<s:file name="upload" label="头像"/>
<s:submit value="提交"/>
</s:form>
-
创建文件到达目录存放默认文件

-
Java代码
code
public class UpLoadFile extends ActionSupport { private String name; private String password; private File upload; private String uploadContentType;//上传文件的mimeType类型 private String uploadFileName;//上传文件的名称public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public String getPassword() {
return password;
}public void setPassword(String password) {
this.password = password;
}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 uploadFile() throws IOException {
String path = "E:/JetBrainJava/strut2demo/target/strut2demo/upload";
System.out.println("path:"+path);
if(name == null || name.equals("")){
this.addFieldError("nameError", "用户名不能为空");
return "fail";
}
if(password == null || password.equals("")){
this.addFieldError("passwordError", "密码不能为空");
return "fail";
}
ServletActionContext.getContext().getSession().put("name", name);
//将访问图片的链接存放在session中
if(upload == null){//如果没有上传图像,则使用默认图片
ServletActionContext.getContext().getSession().put("image", "http://localhost:8080/strut2demo/upload/default.png");
System.out.println("保存成功");
return "success";
}
else{//如果上传图片成功,则将上传图片设置为其头像
String pre = uploadFileName.split("\.")[0];
String tail = uploadFileName.split("\.")[1];
pre = pre + System.currentTimeMillis();
uploadFileName = pre + "." + tail;//对名字加上时间戳,防止重名导致文件被覆盖
// File dest = new File(path, uploadFileName);
// System.out.println("dest: "+dest);
// FileUtils.copyFile(upload, dest);
//复制到tomcat目录下
FileUtils.copyFile(upload, new File(ServletActionContext.getServletContext().getRealPath("/upload"), uploadFileName));
ServletActionContext.getContext().getSession().put("image", "http://localhost:8080/strut2demo/upload/"+uploadFileName);
System.out.println("保存成功");
return "success";
}
}
- 配置文件
<action name="upfile" class="com.mystruts2.struts2demo.action.UpLoadFile" method="uploadFile">
<result name="success">uploadSuccess.jsp</result>
<result name="fail">uploadFail.jsp</result>
<interceptor-ref name="defaultStack">
<param name="fileUpload.allowedExtensions">jpg, jpeg, png</param>
</interceptor-ref>
</action>
- 跳转成功显示页面

将从seesion将连接取出直接访问图片

浙公网安备 33010602011771号