`

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

 
阅读更多

文件的上传下载是 Web 开发中老生常谈的功能,基于 Struts2 框架对于实现这一功能,更是能够给我们带来很多的便利。Struts2 已经有默认的 upload 拦截器。我们只需要写参数,它就会自动帮我们封装好。这篇我们就先来看一下基于 Struts2 的单文件和多文件上传。

一、 单文件上传

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>
复制代码

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>
复制代码

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 	public String upload (){
 17 
 18 		//1.拿到ServletContext
 19 		ServletContext servletContext = ServletActionContext.getServletContext();
 20 		//2.调用realPath方法,获取根据一个虚拟目录得到的真实目录	
 21 		String realPath = servletContext.getRealPath("/WEB-INF/file");
 22 	        //3.如果这个真实的目录不存在,需要创建
 23 		File file = new File(realPath );
 24 		if(!file.exists()){
 25 			file.mkdirs();
 26 		}
 27 		//4.把文件存过去
 28 		//拷贝:把文件的临时文件复制到指定的位置。注意:临时文件还在
 29 		//FileUtils.copyFile(myfile, new File(file,myfileFileName));
 30 
 31 		//剪切:把临时文件剪切指定的位置,并且给他重命名。 注意:临时文件没有了
 32 		myfile.renameTo(new File(file,myfileFileName));
 33 		return SUCCESS;
 34 	}
 35 
 36 	public File getMyfile() {
 37 		return myfile;
 38 	}
 39 
 40 	public void setMyfile(File myfile) {
 41 		this.myfile = myfile;
 42 	}
 43 
 44 	public String getMyfileFileName() {
 45 		return myfileFileName;
 46 	}
 47 
 48 	public void setMyfileFileName(String myfileFileName) {
 49 		this.myfileFileName = myfileFileName;
 50 	}
 51 
 52 	public String getMyfileContentType() {
 53 		return myfileContentType;
 54 	}
 55 
 56 	public void setMyfileContentType(String myfileContentType) {
 57 		this.myfileContentType = myfileContentType;
 58 	}
 59 
 60 }
复制代码

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
 20                 </param>
 21 	     </interceptor-ref>
 22 	     <result>/index.jsp</result>
 23 	     <result name="input" type="redirect">/upload.jsp</result>
 24 	  </action>
 25 
 26       </package>
 27 
 28 </struts>
复制代码

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}

 

二、 多文件上传

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

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>
复制代码

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 }
复制代码
分享到:
评论

相关推荐

    基于Struts2的文件上传下载功能的完整源代码。

    在基于Struts2的文件上传下载功能中,它提供了处理用户上传文件和提供文件下载的服务。这个完整的源代码是实现这些功能的一个实例,经过测试确保了其正确性和可用性。 首先,我们要理解Struts2中的Action类。Action...

    基于struts2的文件上传+过滤器

    在基于Struts2的项目中,文件上传是一个常见的需求,例如用户上传个人头像、上传文档等。同时,为了确保系统安全和性能,我们需要对上传的文件进行一些限制,比如限制文件类型和大小。本篇文章将详细介绍如何在...

    struts 单文件上传和多文件上传带进度条

    在Struts中,可以实现单文件和多文件的上传,并且为了提升用户体验,我们还可以添加进度条来显示文件上传的状态。本文将详细介绍如何在Struts中实现这两个功能,并带上传进度条。 首先,我们需要了解Struts中处理...

    swfuplaod+struts2实现多文件上传

    SWFUpload 是一款开源的Flash上传组件,...通过上述步骤和注意事项,你可以利用SWFUpload和Struts2构建一个功能强大且安全的多文件上传功能。在实际项目中,根据需求进行适当的定制和优化,以满足用户需求和系统安全。

    struts2+jquery+ajax文件异步上传

    总的来说,"struts2+jquery+ajax文件异步上传"是一个结合了后端处理和前端交互的文件上传解决方案,提供了良好的用户体验和灵活性。通过MyEclipse这样的集成开发环境,开发者可以方便地构建、调试和部署这样的项目。

    struts2文件上传源码和步骤

    Struts2 是一个基于 MVC 设计模式的 Java Web 开发...对于初学者来说,理解这些内容有助于掌握 Struts2 框架和文件上传的基本操作。在实际开发中,可能还需要考虑更多细节,如多文件上传、文件重命名策略、错误处理等。

    struts2文件上传jar

    这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件上传的基本流程。当用户通过表单提交包含文件输入字段的请求时,Struts2框架会...

    struts2文件上传实例

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上是基于Struts2框架实现文件上传的基本步骤和关键知识点。通过理解和掌握这些内容,开发者可以构建出稳定、安全且用户体验良好的文件上传功能。

    struts2+extjs3 单/多文件上传

    本文将深入探讨如何使用Struts2和ExtJS3实现单文件和多文件的上传功能。 首先,我们要理解文件上传的基本流程。在Web应用中,用户通过浏览器选择本地文件,然后这些文件的数据被封装到HTTP请求中发送到服务器。...

    基于struts的文件上传下载源代码

    在本"基于Struts的文件上传下载源代码"中,我们可以深入理解Struts如何处理文件上传和下载操作,这对于初学者来说是一个非常实用的学习资源。 首先,文件上传在Web应用中是常见的功能,它允许用户从本地计算机选择...

    struts2文件上传下载

    通过上述知识点,我们可以构建一个基于Struts2框架的文件上传和下载功能。这些功能在Web应用中非常实用,可以用于上传用户资料、产品图片、报表文件等,以及提供各种文件的下载服务。开发者应当注意这些操作的安全性...

    java 文件上传(包括struts2文件上传,smartupload,基于apatch 的fileupload的文件上传)

    java 文件上传(包括struts2文件上传,smartupload,基于apatch 的fileupload的文件上传):该文件包括文件上传的多个实例:有基于strtus2自带的文件上传实例、smartupload文件实例 和基于aptche自带的fileupload 的...

    struts2_uploadify带进度条的多文件上传下载

    总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...

    基于Struts+Hibernate文件上传

    在Java Web开发中,"基于Struts+Hibernate文件上传"是一个常见的应用场景,它结合了两个强大的框架:Struts和Hibernate,来实现用户界面与数据库之间的交互。Struts是MVC(Model-View-Controller)架构的一个实现,...

    基于struts2的文件上传

    通过以上步骤,你已经实现了基于Struts2的文件上传功能。`Java_File_UpDown_Struts2_03`这个文件名可能是示例代码或教程资源,包含了更详细的实现细节。如果你想要进一步学习,可以查看这个文件夹中的内容,包括...

    struts2 文件上传

    Struts2 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,提供了丰富的特性和强大的控制层功能,使得文件上传操作变得相对简单。在本篇中,我们将深入探讨Struts2实现文件上传的原理、步骤以及需要...

    在Struts 2中实现文件上传

    Struts 2 文件上传是基于 Apache Commons FileUpload 组件实现的,这个组件处理 HTTP 请求中的多部分数据,将上传的文件保存到服务器的临时目录。Struts 2 的 fileUpload 拦截器则负责将这些文件绑定到 Action 对象...

    基于Struts2和Spring的网络硬盘系统,批量上传文件和在线解压,优秀源代码!

    基于Struts2和Spring的网络硬盘系统,批量上传文件和在线解压,优秀源代码! 基于Struts2和Spring的网络硬盘系统,批量上传文件和在线解压,优秀源代码! 基于Struts2和Spring的网络硬盘系统,批量上传文件和在线...

    Struts2文件上传

    以上就是基于Struts2实现头像上传的基本步骤和关键知识点,包括Struts2的配置、Action类的编写、前端表单设计以及文件上传过程中的常见问题。通过这样的流程,开发者可以构建出稳定且功能完善的文件上传系统。

    Struts1实现文件上传源码

    在这个“Struts1实现文件上传源码”实例中,我们将深入探讨如何利用Struts1框架来处理文件上传操作。 在Web应用中,文件上传功能是非常常见的,比如用户上传头像、提交文档等。Struts1提供了ActionForm类和一系列...

Global site tag (gtag.js) - Google Analytics