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

© 2012, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记