Struts2实现单个文件上传的示例

原创 2012年03月26日 16:58:45

      Struts2并未提供自己的上传文件组件,但是Struts2却可以使用其他的上传文件组件,比如Commons-FileUploadCos等。即使不懂这些组件细节,我们依然可以正常使用,因为Struts2已经为这些组件封装好了接口,我们按照其规范实现即可。

    本文介绍Struts2使用常用的Commons-FileUpload组件实现文件的上传。引入commons-fileupload.jar,因为组件依赖commons-io组件,所以同时引入commons-fileupload.jar和commons-io.jar(至于版本不再叙述)

    首先编写Action类:

      

package com.upload;
import static org.apache.struts2.ServletActionContext.getActionContext;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Map;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/*
 * 单文件上传
 */
public class Upload extends ActionSupport {
	
	private File file;
	//文件名
	private String fileFileName;
	//文件类型
	private String fileContentType;
	//文件大小
	private String maximumSize;
	//上传允许的文件类型
	private String allowedTypes;
	
	public String getMaximumSize() {
		return maximumSize;
	}
	public void setMaximumSize(String maximumSize) {
		this.maximumSize = maximumSize;
	}
	public String getAllowedTypes() {
		return allowedTypes;
	}
	public void setAllowedTypes(String allowedTypes) {
		this.allowedTypes = allowedTypes;
	}	
	public File getFile() {
		return file;
	}
	public void setFile(File file) {
		this.file = file;
	}
	public String getFileFileName() {
		return fileFileName;
	}
	public void setFileFileName(String fileFileName) {
		this.fileFileName = fileFileName;
	}
	public String getFileContentType() {
		return fileContentType;
	}
	public void setFileContentType(String fileContentType) {
		this.fileContentType = fileContentType;
	}
	
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		
		File uploadFile=new File(ServletActionContext.getServletContext().getRealPath("uploadFile"));
		if(!uploadFile.exists())
		{
			uploadFile.mkdir();	
		}
		
//		第一种读写方式
		FileInputStream input=new FileInputStream(file);
		FileOutputStream out=new  FileOutputStream(uploadFile+"\\"+fileFileName);
		
		try
		{
			byte[] b =new byte[1024];
			int i=0;
			while((i=input.read(b))>0)
					{
				      out.write(b, 0, i);    
					}
		}catch(Exception e)
		{
			e.printStackTrace();
		}finally
		{
			input.close();
			out.close();
		}
		
		//获得上传文件的大小
		//若是上传的文件大小大于规定的大小则返回错误页面
		if(file.length()>Long.parseLong(maximumSize))
		{
			Map request=(Map)ActionContext.getContext().get("request");
			request.put("errorMessage","文件太大,不能上传!");
			return "input";
		}
		
		boolean flag=false;
		//限制的文件类型
		String[] allowedTypesStr=allowedTypes.split(",");
		for(int i=0;i<allowedTypesStr.length;i++)
		{
			
			if(fileContentType.equals (allowedTypesStr[i]))
					{
				       flag=true;  
					}
		}
		
		if(flag==false)
		{
			Map request=(Map)ActionContext.getContext().get("request");
			request.put("errorMessage","文件类型不正确!");
			return "input";
		}	
	return "success";
	}
}

    注意:文件名和文件类型的命名都是有要求的,文件名和文件类型的前缀是文件变量。

      比如:上文中的文件变量是file,则文件名变量是fileXX,文件类型是fileXX。

    同时在Action中定义了上传文件的大小和类型的限制。

         //文件大小限制

         private String maximumSize;

         //上传允许的文件类型限制

         private String allowedTypes;

    在struts2.xml配置文件进行配置:

<package name="upload" namespace="/" extends="struts-default">
 <action name="upload" class="com.upload.Upload">
   <param name="maximumSize">1000000</param>
   <param name="allowedTypes">application/msword,text/plain</param>
   <result name="success">success.jsp</result>
   <result name="error">error.jsp</result>
   <result name="input">input.jsp</result>
   </action>
</package>

   前台jsp文件:

 <form action="upload" method="post"  enctype="multipart/form-data">
  <input type="file" name="file"><p>
  <input type="submit" value="登录">
 </form>

    注意:表单数据的编码格式enctype="multipart/form-data",<input type="file" name="file">文件类型的输入域的name是Action中的File对象的名称。

    表单数据的编码格式enctype有三个值:text/plain;指定了表单是以文本的方式进行提交。application/x-www-form-urlencoded这是默认的编码方式,提交时,只提交表单域的value属性值。multipart/form-data是把文件中的内容也提交。

Struts2之Crud综合实例

本文是Struts2的综合实例,主要包含以下功能 添加,删除,修改,查询用户 上传,下载图片 拦截器实现登陆功能 验证器检查输入 下载图片功能以前没有实现过,步骤如下 在类中增加两个属性 ...
  • whuhan2013
  • whuhan2013
  • 2016年04月29日 19:21
  • 1443

Struts学习总结(五)---使用Struts2实现单个文件上传

使用Struts2实现单个文件的上传
  • wu631464569
  • wu631464569
  • 2016年08月31日 14:57
  • 339

使用hibernate和struts2实现分页功能

原文地址:http://www.cnblogs.com/xiaoluo501395377/archive/2012/10/18/2730073.html 1.DAO层接口的设计,定义一个Perso...
  • curry_du
  • curry_du
  • 2016年03月18日 20:36
  • 1860

strust2-学习(一)框架搭建和简单示例

作者在这里创建的是maven工程,没有了解过如何使用maven的同学请先学习如何使用maven搭建项目。 一、jar包引入 作者引入的是2.3.7版本的struts2-core包。 pom的...
  • cw961590280
  • cw961590280
  • 2016年08月23日 09:47
  • 1760

Struts2_CRUD操作实例

Struts2_CRUD操作实例 Struts2运行流程: 浏览器先发了个请求, 先会到StrutsPrepareAndExecuteFilter的doFilter方法, 然后...
  • Mrwuyi
  • Mrwuyi
  • 2016年05月24日 21:50
  • 5636

struts2之单个文件上传

转自:http://www.cnblogs.com/linjiqin/archive/2011/03/21/1990674.html 通过2种方式模拟单个文件上传,效果如下所示 开发步...
  • yuanye348623610
  • yuanye348623610
  • 2013年04月30日 16:27
  • 444

Struts2单个文件上传

通过2种方式模拟单个文件上传,效果如下所示 开发步骤如下: 1、新建一个web工程,导入struts2上传文件所需jar,如下图 目录结构   ...
  • BtQnIT
  • BtQnIT
  • 2013年08月06日 11:44
  • 390

Struts2自定义拦截器实例—只允许从登录页面进入系统

【1】struts.xml: ...
  • yang_ai
  • yang_ai
  • 2016年07月31日 14:47
  • 550

struts2之单个文件上传

通过2种方式模拟单个文件上传,效果如下所示 开发步骤如下: 1、新建一个web工程,导入struts2上传文件所需jar,如下图 目录结构 ...
  • Elina_1992
  • Elina_1992
  • 2014年12月23日 14:50
  • 306

struts2之单个文件上传

通过2种方式模拟单个文件上传,效果如下所示 开发步骤如下: 1、新建一个web工程,导入struts2上传文件所需jar,如下图 目录结构   ...
  • zzhhyy111111
  • zzhhyy111111
  • 2017年07月27日 13:23
  • 162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts2实现单个文件上传的示例
举报原因:
原因补充:

(最多只允许输入30个字)