以前struts1使用的FormFile我不是很喜欢,这下好了,struts2现在直接拿到File了,OK,上代码!

需要上传的话要用到2个jar包:commons-io-x.jar和commons-fileupload-x.jar导入到lib后即可。

PS:我的工程名字叫TestStruts

1.写action:(BaseAction.java见第一章节)

FormFileStruts2.java:

package com.xuyi.action;

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

public class FormFileStruts2 extends BaseAction {
	
	public static final String ROOT = "upload\\";
	
	private String username;
	
	//可以拿到file的流,使用tmp文件
	private File image;
	
	//固定格式取file的真实文件名
	private String imageFileName;
	
	//固定格式
	private String imageContentType;
	
	private String msg;
	
	@Override
	public String execute() throws Exception {
		//配置src下面的struts.properties中加入struts.multipart.saveDir = /tmp
		//否则在上传文件时会出现Unable to find 'struts.multipart.saveDir' property setting的错误
		
		String rootPath = getSession().getServletContext().getRealPath("/");
		rootPath += ROOT;
		mkDirectory(rootPath);
		System.out.println(rootPath);
		try {
			upload(imageFileName, rootPath, image);
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
		
		msg = imageFileName;
		return SUCCESS;
	}
	
	/**
	 * 根据路径创建一系列的目录
	 * 
	 * @param path
	 */
	boolean mkDirectory(String path) {
		File file = null;
		try {
			file = new File(path);
			if (!file.exists()) {
				return file.mkdirs();
			}
		} catch (RuntimeException e) {
			e.printStackTrace();
		} finally {
			file = null;
		}
		return false;
	}
	
	/**
	 * 上传文件
	 * 
	 * @param savePath
	 *            文件的保存路径
	 * @param uploadFile
	 *            被上传的文件
	 * @return uploadFileName
	 */
	String upload(String uploadFileName, String savePath, File uploadFile) {
		FileOutputStream fos = null;
		FileInputStream fis = null;
		try {
			fos = new FileOutputStream(savePath + uploadFileName);
			fis = new FileInputStream(uploadFile);
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = fis.read(buffer)) > 0) {
				fos.write(buffer, 0, len);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				fos.close();
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return uploadFileName;
	}

	public File getImage() {
		return image;
	}

	public void setImage(File image) {
		this.image = image;
	}
	
	public String getImageContentType() {
		return imageContentType;
	}

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

	public String getImageFileName() {
		return imageFileName;
	}

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

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getMsg() {
		return msg;
	}

	
}

src下面新建一个struts.properties文件:


struts.multipart.saveDir = /tmp

 

2.配置struts.xml


<!DOCTYPE struts PUBLIC 
	"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<!--package: name可以随便指定  namespace指定页面的目录(/为根目录) extends指定为 struts-default.xml文件(此文件包含默认的设置和定义) -->
	<package name="struts" namespace="/" extends="struts-default">
		<!--action:name是访问action的名称 class是action的类 method是访问的action里的方法等同于struts1的method result是返回url-->
			
		<!-- struts2 file_upload begin -->
		<action name="formFileStruts2" class="com.xuyi.action.FormFileStruts2">
			<result name="success">/pages/struts2_form_file_result.jsp</result>
		</action>		
		<!-- struts2 file_upload end -->
	</package>
</struts>

 

3.在WebRoot下建立pages文件夹中创建jsp

struts2_form_file_submit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Struts2-form上传示例-提交页</title>
</head>
<body>
	<form action="../formFileStruts2.action" method="post" enctype="multipart/form-data">
		用户名:<input type="text" name="username"><br/><br/>
		图片:<input type="file" name="image"><br/><br/>
		<input type="submit" value="提交">
	</form>
</body>
</html>

 struts2_form_file_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Struts2-form上传示例-结果页</title>
</head>
<body>
	${username}上传图片${msg}成功!
</body>
</html>

 4.访问:http://localhost:8080/TestStruts/pages/struts2_form_file_submit.jsp即可操作