现在的位置: 首页 > 综合 > 正文

基于struts2的文件上传示例

2014年07月16日 ⁄ 综合 ⁄ 共 3619字 ⁄ 字号 评论关闭

在webroot文件夹下创建fileupload文件夹

单文件上传

上传页面:

<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags"   prefix="s"%>
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
    </head>
  <body>
    <form action="${pageContext.request.contextPath}/upload/uploadAction_saveFile.action"  
          name="form1"  method="post"  enctype="multipart/form-data" >
             
             上传文件名称:<input type="file" name="uploadImage">
           <input type="submit" value="上传">
    </form>
  </body>
</html>

创建对应的uploadAction类

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

import javax.servlet.ServletContext;

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

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class UploadAction extends ActionSupport {
	
	/*
	 * 上传文件的存储的临时文件:
	 * apache-tomcat-6.0.35\\work\\Catalina\\localhost\\itcast1105_struts\\upload__5fee1dc7_13ad3d1835b__8000_00000000.tmp
	 */
	private File uploadImage;
	
	//上传文件的类型:text/plain
	private String uploadImageContentType;
	
	//上传文件的真是名称
	private String uploadImageFileName;
	
	public File getUploadImage() {
		return uploadImage;
	}

	public void setUploadImage(File uploadImage) {
		this.uploadImage = uploadImage;
	}

	public String getUploadImageContentType() {
		return uploadImageContentType;
	}

	public void setUploadImageContentType(String uploadImageContentType) {
		this.uploadImageContentType = uploadImageContentType;
	}

	public String getUploadImageFileName() {
		return uploadImageFileName;
	}

	public void setUploadImageFileName(String uploadImageFileName) {
		this.uploadImageFileName = uploadImageFileName;
	}

	public String saveFile(){
		ServletContext sc = ServletActionContext.getServletContext();
		String path = sc.getRealPath("/fileupload");
		//创建文件用于接收上传上来的林十年文件
		File file = new File(path, uploadImageFileName);	
		try {		
			FileUtils.copyFile(uploadImage, file);		
		} catch (IOException e) {
			e.printStackTrace();
		}
		//将临时文件清空
		uploadImage.delete();
		return "success";
	}
	
}

在struts.xml文件中配置文件上传的总大小
    <!-- 配置文件上传的总大小 -->
    <constant name="struts.multipart.maxSize" value="2097152000"></constant>

配置相应的拦截器参数

<action name="uploadAction_saveFile" class="UploadAction" method="saveFile">
			<result name="success">/upload/success.jsp</result>
			<result name="input">/upload/error.jsp</result>
			
			<!-- 配置拦截器的参数,这里是文件上传拦截器 -->
			<interceptor-ref name="defaultStack">
              	<!-- 
              		配置文件上传拦截器的参数
              			* 与定义参数的顺序无关
              			* 允许的类型(allowedTypes)和允许的扩展名(allowedExtensions)必须保持一致
              	 -->
              	<!-- 
              		* 配置上传文件的大小
              			* struts.xml文件中配置的是上传文件的总大小
              			* 这里配置的是上传文件的单个大小
              	 -->
              	<param name="fileUpload.maximumSize">20971520</param>
              	<!-- 配置上传文件允许的类型,如果配置多个值的话,用","隔开 -->
              	<param name="fileUpload.allowedTypes">text/plain,application/msword</param>
              	<!-- 配置上传文件的扩展名,如果配置多个值的话,用","隔开 -->
              	<param name="fileUpload.allowedExtensions">.txt</param>
            </interceptor-ref>
			
</action>


多文件上传:

页面:

<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags"   prefix="s"%>
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
    </head>
  <body>
    <form action="${pageContext.request.contextPath}/upload/uploadsAction_saveFiles.action"  
          name="form1"  method="post"  enctype="multipart/form-data" >
             上传文件名称:<input type="file" name="uploadImages"><br>
             上传文件名称:<input type="file" name="uploadImages"><br>
             上传文件名称:<input type="file" name="uploadImages"><br>
                 
           <input type="submit" value="上传">
    </form>
  </body>
</html>

action中的处理方法

        private File [] uploadImages;
	
	private String [] uploadImagesContentType;
	
	private String [] uploadImagesFileName;
	
	public String saveFiles(){
		System.out.println("UploadsAction ******** saveFiles()");
		
		ServletContext sc = ServletActionContext.getServletContext();
		
		String path = sc.getRealPath("/fileupload");
		
		for(int i=0;i<uploadImages.length;i++){
			File file = new File(path, uploadImagesFileName[i]);
			
			try {
				FileUtils.copyFile(uploadImages[i], file);
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			uploadImages[i].delete();
			
		}
		
		return "success";
	}

抱歉!评论已关闭.