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号