0%

struts2 文件上传的处理

提交页面就不贴了,都一样。在Action中,struts2会自动把上传的文件转为File对象,所以只需要从该对象读取流,写入到硬盘中即可。

package com.struts2;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUpload extends ActionSupport {
    private String username;
    //上传文件会自动转成File类型,所以原理简单,只要将file以流读取,写入到指定位置即可
    private File file;
    //文件名:字段名+FieName,如果用File对象的getName()方法,取到的是临时文件的文件名
    private String fileFileName;
    //文件类型:字段名+ContentType,返回MIME
    private String fileContentType;
    
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public File getFile() {
        return file;
    }
    public void setFile(File file) {
        this.file = file;
    }
    public String getFileFileName() {
        return fileFileName;
    }
    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }

    public String getFileContentType() {
        return fileContentType;
    }

    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }
    

    @Override
    public String execute() throws Exception {
        // 写入硬盘
        String path=ServletActionContext.getRequest().getRealPath("/upload");
        FileOutputStream fos=new FileOutputStream(new File(path,fileFileName));
        FileInputStream fis=new FileInputStream(file);
        byte[] bs=new byte[1024];
        int len=0;
        while((len=fis.read(bs,0,1024))>-1)
        {
            fos.write(bs, 0, len);
        }
        fis.close();
        fos.close();
        return SUCCESS;
    }
    
}

如果是多文件上传,只需修改file,fileFileName,fileContentType类型为List(包括setter和getter方法),在execute方法中,循环保存文件即可。 默认情况下,只允许上传2M以内的文件,可以在struts.properties(src目录下)中添加一行:

struts.multipart.maxSize=104857600

允许上传100M,也可以在struts.xml中使用constant标签,name为struts.multipart.maxSize,value为104857600