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将连接取出直接访问图片
posted @ 2020-10-21 21:45  一只代码狗  阅读(155)  评论(0)    收藏  举报