基于Struts2的单文件和多文件上传

Struts2 已经有默认的upload拦截器。我们只需要写参数,它就会自动帮我们封装好。

一、 单文件上传

1.1 导jar包

commons-fileupload-1.3.jar

commons-io-2.0.1.jar

commons-logging-1.1.3.jar

freemarker-2.3.19.jar

ognl-3.0.6.jar

struts2-core-2.3.15.3.jar

xwork-core-2.3.15.3.jar

1.2 web.xml配置Struts2核心过滤器

  1   <filter>
  2     <filter-name>struts2</filter-name>
  3     <filter-class>
  4          org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  5     </filter-class>
  6   </filter>
  7
  8   <filter-mapping>
  9     <filter-name>struts2</filter-name>
 10     <url-pattern>/*</url-pattern>
 11   </filter-mapping>

XML Code

1.3 JSP文件上传页(注意file的name属性一定要与Action里面的File类型属性名一致)

  1     <!-- 文件上传的必要前提: 
  2       1.请求方式必须是post
  3       2.enctype属性的取值必须是multipart/form-data 
  4       3.提供一个文件选择域 文件上传
  5       -->
  6
  7       <s:form  action="upload.action" enctype="multipart/form-data">
  8
  9             <s:file  name="myfile"  label="请选择文件"></s:file>
 10             <s:submit value  ="提交"></s:submit>
 11
 12       </s:form>

Jsp Code

1.4 实现文件上传的UploadAction

  1 package com.fhcq.action;
  2
  3 import java.io.File;
  4 import javax.servlet.ServletContext;
  5 import org.apache.commons.io.FileUtils;
  6 import org.apache.struts2.ServletActionContext;
  7 import com.opensymphony.xwork2.ActionSupport;
  8
  9 public class UploadAction extends ActionSupport  {
 10
 11 	//表单上提供的字段
 12 	private File myfile;
 13 	//struts2在文件上传时提供的属性
 14 	private String myfileFileName;//上传的文件名。上传字段名称+FileName  注意大小写
 15 	private String myfileContentType;//上传文件的MIME类型。上传字段名称+ContentType 注意大小写
 16 	
 17      public String upload (){
 18
 19 		//1.拿到ServletContext
 20 		ServletContext servletContext = ServletActionContext.getServletContext();
 21 		//2.调用realPath方法,获取根据一个虚拟目录得到的真实目录
 22 		String realPath = servletContext.getRealPath("/WEB-INF/file");
 23		//3.如果这个真实的目录不存在,需要创建
 24 		File file = new File(realPath );
 25 		if(!file.exists()){
 26 			file.mkdirs();
 27 		}
 28 		//4.把文件存过去
 29 		//拷贝:把文件的临时文件复制到指定的位置。注意:临时文件还在
 30 		//FileUtils.copyFile(myfile, new File(file,myfileFileName));
 31
 32 		//剪切:把临时文件剪切指定的位置,并且给他重命名。 注意:临时文件没有了
 33 		myfile.renameTo(new File(file,myfileFileName));
 34 		return SUCCESS;
 35 	}
 36
 37 	public File getMyfile() {
 38 		return myfile;
 39 	}
 40
 41 	public void setMyfile(File myfile) {
 42 		this.myfile = myfile;
 43 	}
 44
 45 	public String getMyfileFileName() {
 46 		return myfileFileName;
 47 	}
 48
 49 	public void setMyfileFileName(String myfileFileName) {
 50 		this.myfileFileName = myfileFileName;
 51 	}
 52
 53 	public String getMyfileContentType() {
 54 		return myfileContentType;
 55 	}
 56
 57 	public void setMyfileContentType(String myfileContentType) {
 58 		this.myfileContentType = myfileContentType;
 59 	}
 60
 61 }
 62 

Action Code

1.5 配置struts.xml(注意:修改文件上传的总的大小。)

  1 <struts>
  2      <!--constant修改struts2的默认配置值  -->
  3      <!--修改struct2称为开发模式,修改配置之后会自动加载  -->
  4      <constant name="struts.devMode" value="true" />
  5      <!-- 限制上传文件的大小,第一种方式:通过修改struts2的常量。
  6 		在default.properties中配的struts.multipart.maxSize=2097152-->
  7      <constant name="struts.multipart.maxSize" value="4097152" />
  8
  9      <package name="p1"  extends="struts-default">
 10
 11 	  <action  name ="upload" class = "com.fhcq.action.UploadAction" method="upload">
 12
 13           <!-- 第二种方式:通过给fileUpload的拦截器注入参数的形式,控制上传文件的大小
 14           无法使用   <param name="fileUpload.maximumSize">31457280</param>-->
 15 	     <interceptor-ref name="defaultStack">
 16 		<!-- 限制上传文件的扩展名。如果有多个,使用逗号分隔
 17 		<param name="fileUpload.allowedExtensions">jpg,png,bmp</param>-->
 18 		<!-- 限制上传文件的MIME类型。 如果有多个,使用逗号分隔 -->
 19                <param name="fileUpload.allowedTypes">image/jpg,image/pjpeg,image/png</param>
 20 	     </interceptor-ref>
 21 	     <result>/index.jsp</result>
 22 	     <result name="input" type="redirect">/upload.jsp</result>
 23 	  </action>
 24
 25       </package>
 26
 27 </struts>
 28 

XML Code

1.6 配置fileupload_message.properties,放置在src下用来显示错误的资源文件信息

  1 struts.messages.error.content.type.not.allowed=\u4E0A\u4F20\u6587\u4EF6\u7684\u7C7B\u578B\u4E0D\u662F\u88AB\u652F\u6301\u7684: {0} "{1}" "{2}" {3}

Properties Code

二、 多文件上传

在以上单文件上传的基础上,修改内容如下:

2.1 JSP文件上传页(注意file的name属性一定要与Action里面的File类型属性名一致)

  1     <!-- 文件上传的必要前提:
  2   	 1.请求方式必须是post
  3   	 2.enctype属性的取值必须是multipart/form-data
  4   	 3.提供一个文件选择域
  5       -->
  6
  7       <s:form  action="upload.action" enctype="multipart/form-data">
  8
  9             <s:file  name="myfile"  label="请选择文件"></s:file>
 10             <s:file  name="myfile"  label="请选择文件"></s:file>
 11             <s:submit value  ="提交"></s:submit>
 12
 13       </s:form>

Jsp Code

2.2 实现文件上传的UploadAction

  1 package com.fhcq.action;
  2
  3 import java.io.File;
  4
  5 import javax.servlet.ServletContext;
  6
  7 import org.apache.struts2.ServletActionContext;
  8
  9 import com.opensymphony.xwork2.ActionSupport;
 10
 11 public class UploadAction extends ActionSupport  {
 12
 13 	//表单上提供的字段
 14 	private File[]   myfile;
 15 	//struts2在文件上传时提供的属性
 16 	private String[] myfileFileName;上传的文件名。上传字段名称+FileName  注意大小写
 17 	private String[] myfileContentType;//上传文件的MIME类型。上传字段名称+ContentType 注意大小写
 18
 19 	public String upload (){
 20
 21 		//1.拿到ServletContext
 22 		ServletContext servletContext = ServletActionContext.getServletContext();
 23 		//2.调用realPath方法,获取根据一个虚拟目录得到的真实目录
 24 		String realPath = servletContext.getRealPath("/WEB-INF/files");
 25 		//3.如果这个真实的目录不存在,需要创建
 26 		File file = new File(realPath );
 27 		if(!file.exists()){
 28 			file.mkdirs();
 29 		}
 30 		//4.把文件存过去
 31 		//剪切:把临时文件剪切指定的位置,并且给他重命名。 注意:临时文件没有了
 32 		for(int i=0;i<myfile.length;i++){
 33 			myfile[i].renameTo(new File(file,myfileFileName[i]));
 34 		}
 35
 36 		return SUCCESS;
 37 	}
 38
 39 	public File[] getMyfile() {
 40 		return myfile;
 41 	}
 42
 43 	public void setMyfile(File[] myfile) {
 44 		this.myfile = myfile;
 45 	}
 46
 47 	public String[] getMyfileFileName() {
 48 		return myfileFileName;
 49 	}
 50
 51 	public void setMyfileFileName(String[] myfileFileName) {
 52 		this.myfileFileName = myfileFileName;
 53 	}
 54
 55 	public String[] getMyfileContentType() {
 56 		return myfileContentType;
 57 	}
 58
 59 	public void setMyfileContentType(String[] myfileContentType) {
 60 		this.myfileContentType = myfileContentType;
 61 	}
 62
 63 }
 64 

Action Code

时间: 2024-08-18 13:45:04

基于Struts2的单文件和多文件上传的相关文章

c# 模拟表单提交,post form 上传文件、大数据内容

表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每一份资料的边界 (boundary),用以产生多重信息部份 (message part).而 HTTP 服务器可以抓取 HTTP POST 的信息, 基本内容:1. 每个信息部份都要用 --[BOUNDARY_NAME] 来包装,以分隔出信息的每个部份,而最后要再加上一个 --[BOUNDARY_N

ueditor1.3.6jsp版在struts2应用中上传图片报&quot;未找到上传文件&quot;解决方案

摘要: ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案 在struts2应用中使用ueditor富文本编辑器上传图片或者附件时,即使配置好了上传路径信息,也会出现"未找到上传文件"的错误提示,出先该问题的原因是:在配置struts过滤器,过滤路径设置/*方式时,由于struts2框架默认使用apache的Commons FileUpload组件和内建的FileUploadInterceptor拦截器实现上传,会将reque

求大师点化,寻求大文件(最大20G左右)上传方案

之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需求,都能得到满足.小小开心了一把. 但无论插件再怎么灵活,也难以应付所有的需求,比如,你要上传一个2G的文件.以现在我们的网速,恐怕再快也得传半小时.要命的是,如果你在上传到90%的时候不小心关掉了浏览器,或者是手一抖摁了F5,完了,一切还得从头再来.这种用户体验简直太糟糕了.所以,断点续传就十分有

文件或资源的上传和下载

1.文件的上传 [1] 简介 > 将一个客户端的本地的文件发送到服务器中保存. > 上传文件是通过流的形式将文件发送给服务器. [2] 表单的设置 > 向服务器上传一个文件时,表单要使用post请求. > 表单的默认属性enctype="application/x-www-form-urlencoded" - 这个属性的意思是请求体中的内容将会使用URL编码 > 上传文件的表单enctype需要设置为 multipart/form-data - multi

PHP之文件的锁定、上传与下载

小结文件的锁定机制.上传和下载 1.文件锁定 现在都在讲究什么分布式.并发等,实际上文件的操作也是并发的,在网络环境下,多个用户在同一时刻访问页面,对同一服务器上的同一文件进行着读取,如果,这个用户刚好读到一半,另一个用户就写入了消息,那么前一个用户读到的就是错误数据,在数据库里面好像是称为脏数据,而如果某用户写到一半时,另一用户也对该文件进行写操作,那么就造成了写入数据的混乱和错误,因此才php有一个锁机制,类似于数据库的锁,当某用户在对文件操作时就加上某种锁,使得在同一时间其他用户不能对该文

上传文件按钮美化,上传文件前后状态控制

我们在做input文本上传的时候,html自带的上传按钮比较丑,如何对其进行美化呢?同理:input checkbox美化,input radio美化是一个道理的. input file上传按钮的美化思路是,先把之前的按钮透明度opacity设置为0,然后,外层用div包裹,就实现了美化功能. 注:input 的 type 为 file 时,它的 name 必须有值,因为这个 name 会做为上传文件信息的数组名称. <a href="javascript:;" class=&q

js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; if(window.ActiveXObject) { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '&qu

使用swfupload上传超过30M文件,使用FLASH上传组件

原文:使用swfupload上传超过30M文件,使用FLASH上传组件 前一段时间会员的上传组件改用FLASH的swfupload来上传,既能很友好的显示上传进度,又能完全满足大文件的上传. 后来服务器升级到windows 2008,改为IIS7后,上传文件一旦超过30M时,就出现404错误,而且是是上传进度达到100%之后,真是让人难思其解. 反复测试,发现FLASH上传文件到并没有正确的执行.NET程序,也就是.NET程序本身有问题; 但小于30M又是一切OK,难道是上传的文件大小有所限制?

[html5+java]文件异步读取及上传核心代码

html5+java 文件异步读取及上传关键代码段 功能: 1.多文件文件拖拽上传,file input 多文件选择 2.html5 File Api 异步FormData,blob上传,图片显示 3.java端接受 核心代码: 1.拖拽代码段: 1 <div id="dropzone"> 2 <div>Drag & drop your file here...</div> 3 <div id='showFile'></di

Web.Config文件配置之限制上传文件大小和时间

在邮件发送系统或者其他一些传送文件的网站中,用户传送文件的大小是有限制的,因为这样不但可以节省服务器的空间,还可以提高传送文件的速度.下面介绍如何在Web.Config文件中配置限制上传文件大小与时间. 在Web.Config文件中配置限制上传文件大小与时间字符串时,是在<httpRuntime><httpRuntime/>节中完成的,需要设置以下2个属性: maxRequestLength属性:用于防止服务器攻击,例如因用户向服务器发送大型文件而导致的拒绝访问.默认值为4096(