SSH框架之Struts的文件上传

一、未接触Struts时的文件上传:通过Struts提交的文件上传组件来上传文件。
前台:
1、提交方式POST
2、表单类型 multipart/form-data
3、input type=file

后台:Apache提供的FileUpload组件
核心类:
1、FileItemFactory:FileItem的工厂
2、ServletFileUpload:serlvet中文件上传的核心类
3、FileItem:封装了上传的表单文件项的信息

总之,文件上传,处理起来比较麻烦!!!

二、Struts的文件上传:
1、实现:文件上传的拦截器帮助我们完成了文件上传的功能。

 name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

并且该拦截器同时存在于struts-defautl中的defaultStack中,所以是默认实现的。
SSH框架之Struts的文件上传_第1张图片

2、实现文件上传的代码:
1)项目的目录结构:
SSH框架之Struts的文件上传_第2张图片
2)jsp页面部分:
SSH框架之Struts的文件上传_第3张图片
3)FileUploadAction.java

package sram.fileupload;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport{
     

    //对应表单:
    private File file1;
    //文件名    **FileName固定写法
    private String file1FileName;
    //文件类型(MIME)    **ContentType固定写法
    //Tomcat目录下的conf/web.xml中对类型是定义好的
    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;
    }

    public String execute() throws Exception {
        //拿到上传的文件,进行处理
        System.out.println("FileUpload.execute()");
        /**
         * 把文件上传到upload目录
         */
        //获取上传的目录的路径
        String path = ServletActionContext.getServletContext().getRealPath("/upload");
        //创建目标文件对象
        File destFile = new File(path,file1FileName);
        //把上传的文件,拷贝到目标文件中
        FileUtils.copyFile(file1, destFile);

        return SUCCESS;
    }
}

3、文件上传细节处理
1)文件大小限制
Struts默认支持的文件上传最大是2M
通过常量修改:修改default.properties中的struts.multipart.maxSize=2097152

2)限制上传文件的允许的类型
需求:只允许txt/jpg后缀的文件
解决办法:拦截器注入参数从而限制文件上传类型

3)错误提示:
当文件上传出现错误的时候,struts内部会返回input视图(错误视图),所以就需要我们在struts.xml中配置input视图对应的错误页面!

4)struts.xml配置

<package name="fileupload" namespace="/" extends="struts-default">
        
        <action name="fileUploadAction" class="sram.fileupload.FileUploadAction">

            
            <interceptor-ref name="defaultStack">

                
                <param name="fileUpload.allowedExtensions">txt,jpg,jarparam>
                

            interceptor-ref>

            <result name="success">/fileupload/success.jspresult>

            
            <result name="input">/fileupload/error.jspresult>
        action>
package>

你可能感兴趣的:(Struts,struts文件上传)