`
阳光小菜鸟
  • 浏览: 95952 次
  • 性别: Icon_minigender_2
  • 来自: 郑州
社区版块
存档分类
最新评论

struts2.0实现文件上传

    博客分类:
  • SSI
阅读更多
将下面两个jar文件加入lib
commons-fileupload.jar
commons-io.jar
jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>简单的文件上传</title>
</head>
<body>
<!-- 为了完成文件上传,设置该表单的enctype属性为multipart/form-data。 -->
<s:form action="upload.action" method="post" enctype="multipart/form-data" theme="simple">
<s:fielderror></s:fielderror>
   选择文件:<s:file name ="upload"/> <br>
   选择文件:<s:file name ="upload"/> <br>
   选择文件:<s:file name ="upload"/> <br>
 <s:submit /> 
</s:form>
</body>
</html>

action
action
package org.login.actions;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.apache.struts2.ServletActionContext;
import org.login.page.DateFormatUtil;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
	// 封装单个上传文件域的属性
	// private File upload;
	// 封装单个上传文件类型的属性
	// private String uploadContentType;
	// 封装单个上传文件名的属性
	// private String uploadFileName;

	//封装多个上传文件域的属性
	private List<File> upload = new ArrayList<File>();
	// 封装多个上传文件类型的属性
	private List<String> uploadContentType = new ArrayList<String>();
	// 封装多个上传文件名的属性
	private List<String> uploadFileName = new ArrayList<String>();
	
	//动态设置上传文件保存地址
	private String savePath;
	
	public String getSavePath() {
		return ServletActionContext.getRequest().getRealPath(savePath);
	}

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

	/*
	 * // 上传单个文件对应文件内容的setter和getter方法
	 *  public void setUpload(File upload) {
	 *    this.upload = upload;
	 *  }
	 * public File getUpload() { 
	 *    return (this.upload); 
	 * } 
	 * 
	 * //上传单个文件的文件类型的setter和getter方法 
	 * public void setUploadContentType(String	uploadContentType) { 
	 *   this.uploadContentType = uploadContentType;
	 *  }
	 * public String getUploadContentType() {
	 *  return (this.uploadContentType);
	 * } 
	 * 
	 * // 上传单个文件的文件名的setter和getter方法 
	 * public void setUploadFileName(String uploadFileName) { 
	 *  this.uploadFileName = uploadFileName; 
	 * }
	 * public String getUploadFileName() {
	 *  return (this.uploadFileName);
	 *   }
	 */

	//上传多个文件对应文件内容的setter和getter方法
	public List<File> getUpload() {
		return upload;
	}
	public void setUpload(List<File> upload) {
		this.upload = upload;
	}
	
	//  上传多个文件的文件类型setter和getter方法 
	public List<String> getUploadContentType() {
		return uploadContentType;
	}
	public void setUploadContentType(List<String> uploadContentType) {
		this.uploadContentType = uploadContentType;
	}

	// 上传多个文件的文件名的setter和getter方法 
	public List<String> getUploadFileName() {
		return uploadFileName;
	}
	public void setUploadFileName(List<String> uploadFileName) {
		this.uploadFileName = uploadFileName;
	}

	public String upload() {
		//上传多个文件
		List<File> files = getUpload();
		// String ext ="";
		FileOutputStream fos = null;
		FileInputStream fis = null;
		byte[] buffer = new byte[1024];
		int len = 0;
		Random rd = new Random();
		for (int i = 0; i < files.size(); i++) {
			try {
				//以服务器的文件保存地址和当前时间组合文件名建立上传文件输出流
				// ext =uploadFileName.get(i).substring(uploadFileName.get(i).lastIndexOf('.'));
				 /* fos = new FileOutputStream(getSavePath()+ File.separator+
				 * DateFormatUtil.getCurrentCustomFormatDateTime(DateFormatUtil.DATE_TIME_FORMAT_14) +
				 * String.valueOf(rd.nextInt(1000))+ext);
				 */
				fos = new FileOutputStream(getSavePath() + File.separator
						+ uploadFileName.get(i));
				// 以上传文件建立一个文件上传流
				fis = new FileInputStream(files.get(i));
				// 将上传文件的内容写入服务器
				len = 0;
				while ((len = fis.read(buffer)) > 0) {
					fos.write(buffer, 0, len);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		/*上传单个文件
		 * try { 
		 * // 以服务器的文件保存地址和原文件名建立上传文件输出流 
		 * FileOutputStream fos = new FileOutputStream(ServletActionContext .getRequest().getRealPath("") +
		 * File.separator + "upload" + File.separator + getUploadFileName());
		 * // 以上传文件建立一个文件上传流 
		 * FileInputStream fis = new FileInputStream(getUpload());
		 * // 将上传文件的内容写入服务器 
		 * byte[] buffer = new byte[1024];
		 * int len = 0;
		 * while ((len = fis.read(buffer)) > 0) {
		 * fos.write(buffer, 0, len); 
		 * } 
		 * } catch (Exception e) { 
		 * }
		 */
		return SUCCESS;
	}
}

struts.xml
<action name="upload" class="UploadAction" method="upload">
			<!-- 配置fileUpload的拦截器 -->
			<interceptor-ref name="fileUpload">
				<!-- 配置允许上传的文件类型 -->
				<param name="allowedTypes">
					image/bmp,image/png,image/gif,image/jpeg,image/jpg,application/msword,text/plain
				</param>
				<!-- 配置允许上传的文件大小 -->
				<param name="maximumSize">2000000000</param>
			</interceptor-ref>
			<interceptor-ref name="defaultStack" />
			<!-- 动态设置Action的属性值 -->
			<param name="savePath">/upload</param>
			<result>/upload_succ.jsp</result>
			<result name="input">/upload.jsp</result>
		</action>


上传成功页面
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <title>上传成功</title>
    </head>
    <body>
        上传成功!<br>
  <!-- 输出上传的表单里的文件标题属性 -->
  文件标题:<s:property value=" + title"/><br>
  <!-- 根据上传文件的文件名,在页面上显示上传的图片 -->
  文件为:<s:property value="uploadFileName"/><br>
    </body>
</html>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics