struts2的上传例子

参考了网上一些朋友的资料,自己写了一个struts2的上传例子:

工程使用的是struts2和spring3整合的的,整合部分的配置就不写了,我导入的包有:

struts2部分一共7个:spring3就省略了。

commons-fileupload-1.1.1.jar

commons-io-1.1.jar

commons-logging-1.0.4.jar

freemarker-2.3.8.jar

ognl-2.6.11.jar

xwork-2.0.7.jar

struts2-core-2.0.14.jar

<body>
  	<!-- jsp部分,body里面写了两个表单,一个是fileUpload.action的是struts2上传,fileUploadOther.action的是写IO操作 -->
    <!-- <form action="/struts2upload/system/upload/fileUpload.action" enctype="multipart/form-data" method="post">            
    请选择文件:<input type="file" id="fileOp" name="fileOp" /><input type="submit" value="上传" />       
    </form>  -->
    <br/><br/>
	 <form action="/struts2upload/system/upload/fileUploadOther.action" enctype="multipart/form-data" method="post">            
    请选择文件:<input type="file" id="fileOp" name="fileOp" /><input type="submit" value="上传" />       
    </form>
  </body>
<!-- spring的配置,把路径依赖注入到配置文件里面,IO操作那种方式用的savePath -->
	<bean id="myFileUploadAction" class="com.zyujie.action.UploadAction" scope="prototype">
		<property name="savePath" value="D:\webapp\apache-tomcat-6.0.10\webapps\struts2upload\upfiles" />
	</bean>
<struts>

	<!-- 该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
	如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 -->
	<constant name="struts.action.extension" value="action" />
	<!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
	<constant name="struts.serve.static.browserCache" value="false" />
	<!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
	<constant name="struts.configuration.xml.reload" value="true" />
	<!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
	<constant name="struts.devMode" value="true" />
	<!-- 默认的视图主题 -->
	<constant name="struts.ui.theme" value="simple" />
	<!-- 集成spring,把struts给spring容器管理 -->
	<constant name="struts.objectFactory" value="spring" />
	<!-- 解决乱码 -->
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->
	<constant name="struts.multipart.maxSize" value="2097152"/>
	<!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir -->
	<constant name="struts.multipart.saveDir" value="E:/test" />
	
	<package name="syserror" extends="struts-default">
	
	    <global-results>
	        <result name="sql">/system_error.jsp</result>
	        <result name="invalidinput">/invalid_input.jsp</result>
	        <result name="naming">/system_error.jsp</result>
	        <result name="io">/system_error.jsp</result>
	        <result name="nullpointer">/system_error.jsp</result>
	    </global-results>
	    
	    <global-exception-mappings>
	        <exception-mapping result="sql" exception="java.sql.SQLException"></exception-mapping>
	        <exception-mapping result="invalidinput" exception="cn.codeplus.exception.InvalidInputException"></exception-mapping>
	        <exception-mapping result="naming" exception="javax.naming.NamingException"></exception-mapping>
	    </global-exception-mappings>
	    
	</package>
		

	<!-- Configuration for the default package. -->
	<package name="upload" namespace="/system/upload" extends="struts-default">
		
		<action name="fileUpload" class="myFileUploadAction" method="fileUpload">
			<!-- <param name="fileOpFileName">12345.gif</param> -->
			<result name="success" type="redirect">/ok.jsp</result>
			<result name="io" type="redirect">/system_error.jsp</result>
	        <result name="nullpointer" type="redirect">/system_error.jsp</result>
			<exception-mapping result="io" exception="java.io.IOException"></exception-mapping>
			<exception-mapping result="nullpointer" exception="java.lang.NullPointerException"></exception-mapping>
		</action>
		
        <action name="fileUploadOther" class="myFileUploadAction" method="fileUploadOther">
        	<!-- 动态设置savePath的属性值,设置为服务器上的路径 -->
        	<!-- <param name="savePath">D:\webapp\apache-tomcat-6.0.10\webapps\struts2upload\upfiles</param> -->
        	<param name="fileOpFileName">abcde.xls</param>
        	<result name="success" type="redirect">/ok.jsp</result>
        	<result name="input" type="redirect">/index.jsp</result>
        	<!-- 实现struts的默认拦截器功能,所以要在后面加一个defaultStack,默认拦截栈 -->
        	<interceptor-ref name="fileUpload">
       			<!-- 文件过滤
        		<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg</param>-->
        		<!-- 文件大小, 以字节为单位 -->
        		<param name="maximumSize">2097152</param>
        	</interceptor-ref>
        	<!-- 默认拦截器必须放在fileUpload之后,否则无效 -->
        	<interceptor-ref name="defaultStack" />
        </action>
        
	</package>

</struts>
package com.zyujie.action;

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

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

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class UploadAction extends ActionSupport {

	// 上传的文件
	private File fileOp;
	
	//文件名称 
	private String fileOpFileName;
	
	//文件类型
	private String fileOpContentType;
	
	// 接受依赖注入的属性    
	private String savePath;
	
	/*
	 * 上传文件,把异常往外抛,声明式异常处理,把异常交给struts的xml来进行配置处理,可见strut2的配置xml
	 */
	public String fileUpload() throws IOException{
		//服务器上的路径
		String realpath = ServletActionContext.getServletContext().getRealPath("/upfiles");
		System.out.println("realpath: "+realpath);
		if (fileOp != null) {
			File savefile = new File(new File(realpath), fileOpFileName);
			if (!savefile.getParentFile().exists()){	/**如果文件夹不存在,就创建一个文件夹**/
				savefile.getParentFile().mkdirs();
			}
			FileUtils.copyFile(fileOp, savefile);	//调用struts2的上传组件,进行文件写入
			//没有抛异常,说明文件上传成功
			System.out.println("文件上传成功!");
		}
		return "success";
	}
	
	/*
	 * 通过IO流去上传文件,采用手动处理异常,这样不够简洁
	 */
	public String fileUploadOther(){
		FileOutputStream os = null;
		FileInputStream is = null;
		try {
			// 建立文件输出流
			System.out.println(getSavePath());
			os = new FileOutputStream(getSavePath() + "\\" + getFileOpFileName());
			// 建立文件上传流
			is = new FileInputStream(getFileOp());
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = is.read(buffer)) > 0) {
				os.write(buffer, 0, len);
			}
		} catch (Exception e) {
				System.out.println("文件上传失败");
				e.printStackTrace();
		} finally {
			close(os, is);
		}
		return "success";
	}
	
	/*
	 * 关闭IO流
	 */
	private void close(FileOutputStream os, FileInputStream is) {
		if (is != null) {
			try {
				is.close();
			} catch (IOException e) {
				System.out.println("FileInputStream关闭失败");
				e.printStackTrace();
			}
		}
		if (os != null) {
			try {
				os.close();
			} catch (IOException e) {
				System.out.println("FileOutputStream关闭失败");
				e.printStackTrace();
			}
		}
	}

	public File getFileOp() {
		return fileOp;
	}

	public void setFileOp(File fileOp) {
		this.fileOp = fileOp;
	}

	public String getFileOpFileName() {
		return fileOpFileName;
	}

	public void setFileOpFileName(String fileOpFileName) {
		this.fileOpFileName = fileOpFileName;
	}

	public String getFileOpContentType() {
		return fileOpContentType;
	}

	public void setFileOpContentType(String fileOpContentType) {
		this.fileOpContentType = fileOpContentType;
	}

	public String getSavePath() {
		return savePath;
	}

	public void setSavePath(String savePath) {
		this.savePath = savePath;
	}

}

你可能感兴趣的:(struts2上传,struts2上传文件,struts2实现上传,struts2上传例子,struts2上传实例)