Struts2 单文件上传

Struts2 提供了更为简便的文件上传机制,将文件上传的复杂操作都封装到commons-fileupload.jar 、commons-io.jar两个jar包中,然后再程序中使用简单的几句代码就能实现文件上传;

HTML:

<form action="${pageContext.request.contextPath}/hello/upload_uploadImage.do" enctype="multipart/form-data" method="post">
   			图片:<input type="file" name="image"  />
   			<input type="submit" value="上传" />
   		</form> 

Struts.xml:

<action name="upload_*" class="com.actions.UploadAction" method="{1}">
	 			<result name="message">/WEB-INF/message.jsp</result>
	 		</action>

action:

import java.io.File;
import java.io.IOException;

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

public class UploadAction {

	//只要File的名称与html中File控件的name相一致就可以获取到这个文件
	private File image;
	//只要使用file的name+FileName就可以获取到上传文件的名称
	private String imageFileName;
	//只要使用file的name+ContentType就可以获取到上传文件的类型
	private String imageContentType;
	private String message;

	public String uploadImage() {
		try {
			String realPath = ServletActionContext.getServletContext().getRealPath("/images");
			File filePath = new File(realPath);
			if (!filePath.exists()) {
				filePath.mkdirs();
			}
			System.out.println("文件存放路径:" + realPath);
			if (image != null) {
				System.out.println("文件名:" + imageFileName + ",文件类型:" + imageContentType);
				File saveFile = new File(filePath, imageFileName);
				//默认Struts2会将文件上传到Struts2临时空间中,当Action执行完成以后将文件删除;
				//要实现文件传,只需要将文件从临时空间copy到存储空间即可 
				FileUtils.copyFile(image, saveFile);
				message="文件上传成功!";
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		return "message";
	}

	public File getImage() {
		return image;
	}

	public void setImage(File image) {
		this.image = image;
	}

	public String getImageFileName() {
		return imageFileName;
	}

	public void setImageFileName(String imageFileName) {
		this.imageFileName = imageFileName;
	}

	public String getImageContentType() {
		return imageContentType;
	}

	public void setImageContentType(String imageContentType) {
		this.imageContentType = imageContentType;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

}
注:通过 <constant name="struts.multipart.maxSize" value="10701096"></constant>  可以设置上传文件的大小;

注:对于大文件上传,不推荐使用Web的方式进行上传,可以使用socket的方式;

posted @ 2015-10-12 15:43  Bodi  阅读(174)  评论(0编辑  收藏  举报