`
xusweeter
  • 浏览: 57366 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

使用Struts1实现文件上传(一)

阅读更多

      今天研究了一下Struts的文件上传机制,可以方便的将客户端文件上传至服务器端,感觉很方便、实用,特此记录一下。

      完成文件上传功能大致需要以下几个步骤:

      

     (1)创建用于文件上传的JSP页面;

     (2)创建用于承载数据的ActionForm;

     (3)创建用于处理上传的Action;

     (4)配置文件上传大小;

     (5)配置从web.xml文件中读取文件存放路径;

 

步骤一:创建用于文件上传的JSP页面

 

      在项目中新建一个用于文件上传的JSP页面,如命名为:FileUpload.jsp,在页面的顶头处引入Struts的html标签库。

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> 

      并在页面的<body></body>标签内书写如下代码:

<html:form enctype="multipart/form-data" action="/fileUpload" method="post">
          <html:file property="uploadFile"></html:file>
          <html:submit>Upload File</html:submit>
</html:form> 

      <html:form>是Struts表单,要想用此表单上传文件必须要设置 enctype 和 method 参数才行,enctype 参数用于设置该表单的编码方式,当该表单中包含了<input type = "file"> 或 <html:file> 是必须要将enctype的属性值设置为:"multiparty/form-data"  ,并且要将表单的提交方式Method属性设置为"Post" ;在action处填入处理表单的Action访问路径。

      <html:file>是Struts提供的文件上传组件,其属性property要与承载数据的ActionForm类的FormFile类型的属性保持一一对应的关系。ActionForm类中的属性书写见步骤二。

 

步骤二:创建用于承载数据的ActionForm

 

      在项目中新建一个ActionForm的子类,如命名为:FileUploadForm.java,在其中新增一个FormFile类型的属性uploadFile,并设置getter、setter方法。

import org.apache.struts.upload.FormFile;

private FormFile uploadFile;
          public FormFile getUploadFile() {
          return uploadFile;
}
          public void setUploadFile(FormFile uploadFile) {
          this.uploadFile = uploadFile;
} 

      在Struts中,一个FormFile类型的对象对应Form表单中创送的一个文件,Struts将上传的文件信息封装金FormFile中,通过FormFile提供的方法可以方便的进行文件的操作。其实FormFile是一个接口,位于 org.apache.struts.upload.FormFile 中,它定义了操作上传文件的基本方法。

      FormFile接口定义的常用方法:

      (1) getFileName()/setFileName()   //用于获取或设置文件名;

      (2) getFileSize() / setFileSize()      //用于获取或设置文件字节数;

      (3) getFileData()                           //用于获取文件的字节数组,用于小的文件;

      (4) getInputStream()                    //用于获取文件的输入流,用于较大的文件;

      (5) destory()                                 //销毁FromFile;

 

步骤三:创建用于处理上传的Action

 

      在项目中新建一个Action的子类,如命名为:FileUploadAction.java,在其execute方法中添加处理代码。

public ActionForward execute(ActionMapping mapping, ActionForm form,
		HttpServletRequest request, HttpServletResponse response) {
	
	FileUploadForm fileUploadForm = (FileUploadForm) form;
	FormFile uploadFile = fileUploadForm.getUploadFile();
	try {
		FileOutputStream outer = new FileOutputStream("d:\\"+uploadFile.getFileName());
		byte[] buffer = uploadFile.getFileData();
		outer.write(buffer);
		outer.close();
		uploadFile.destroy();
	} catch (Exception e) {
		e.printStackTrace();
	}
	return null;
	
}

      在代码中可以看到,我们从FileUploadForm中找到了FormFile类型的属性,通过其提供的方法得到文件的信息,并将其存入服务器的磁盘中。在保存的过程中需要用到文件流的一些基本操作。

 

      到此为止,文件的上传已经基本成功,剩下的两步为配置文件上传大小和从web.xml文件中读取文件存放路径,可以选择学习。

 

步骤四:配置文件上传大小

 

      在Struts中可以配置上传文件的大小,以避免服务器的硬盘消化不良。

      打开项目中WebRoot\WEB-INF\struts-config.xml ,切换至源码视图,在其中添加如下节点信息,便可以控制上传文件的大小了。

<controller maxFileSize="8K"></controller>

      其中maxFileSize属性的单位可以是K,也可以是M或G;

      注意:操作struts-config.xml文件时应当特别注意各个节点间的顺序,因为Struts要求配置文件的各个元素顺序有一定的要求,顺序一旦被打乱,也就意味着web容器即将进入瘫痪状态,因此在添加<controler>节点时,要将此节点添加在<action-mapping>和<message-resources>节点之间。

     附:Struts-config.xml配置文件各元素的顺序列表。

The content of element type "struts-config" must match "(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)".

 

 步骤五:配置从web.xml文件中读取文件存放路径

 

       在步骤三中的代码中我们已经看到,在保存文件时,我写的是一个固定的存放路径,有没有什么办法让它动态改变呢?答案是肯定的,Struts提供了一些方法可以读取web.xml中读取数据,那么我们可以把存放的路径存放在web.xml文件中,存储文件时再将路径读取出来。这样做的好处是,如果存放路径发生改变,我们只需要修改配置文件,而不需要改动代码。

 

       打开项目WebRoot\WEB-INF\web.xml , 找到一个servlet,在该servlet的节点下添加如下代码:

<init-param>
  <param-name>path</param-name>
  <param-value>d:\uploadFolder\</param-value>
</init-param>

       要想读取此节点的信息,在处理上传文件的Action代码中加入如下代码:

//以下两行代码任选其一;
String path = this.getServlet().getInitParameter("uploadpath");
String path = this.getServlet().getServletConfig().getInitParameter("uploadpath")

 

       到此基于Struts的文件上传操作已经基本完成。

 

 

      (完) xusweeter @ 2010年8月5日 晚 21:45

 

 

 

 

 

 

 

 

 

 

分享到:
评论
3 楼 qq672076266 2013-08-14  
思路清晰,分析到位。
2 楼 frustrate 2011-11-15  
     
1 楼 449302900 2011-04-18  
  

相关推荐

    struts1实现文件上传

    在Struts1框架中实现文件上传功能是一项常见但又具有一定技术挑战的任务。下面将详细解析文件上传的实现过程,包括关键类的使用、文件处理逻辑以及异常处理等方面。 #### Struts1框架简介 Struts1是Apache Struts的...

    Struts1实现文件上传源码

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

    struts实现的文件上传下载功能

    总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。

    Struts1实现的文件上传

    在这个“Struts1实现的文件上传”项目中,我们将深入探讨如何在Struts1框架下实现文件上传功能,并不涉及文件下载的部分。 首先,理解文件上传的基本流程是至关重要的。在Web应用中,用户通过HTML表单选择本地文件...

    struts2实现文件上传下载

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。

    struts1实现的文件批量上传

    在Struts1中实现文件上传,我们需要考虑前端的HTML表单、ActionForm、Struts配置文件以及后台的Action处理。 首先,前端实现是通过一个支持多文件选择的HTML表单来完成的。表单需要设置`enctype="multipart/form-...

    struts1 实现文件上传下载

    以上是使用Struts1实现文件上传下载的基本流程和关键点。实际开发中,你可能还需要考虑其他因素,如用户界面的优化、错误处理、性能优化等,确保整个过程既安全又高效。在实际操作中,务必参照具体项目的配置和需求...

    struts与hibernate实现文件的上传与动态下载

    通过以上步骤,你可以实现一个基于Struts2和Hibernate的文件上传与动态下载系统。这个系统能够处理用户上传的文件,将其保存到服务器,同时提供动态下载功能,允许用户根据需要下载文件。在实际开发中,还需要考虑...

    Struts2实现文件上传

    在这个“Struts2实现文件上传”的主题中,我们将深入探讨如何利用Struts2框架来实现在Web应用中的文件上传功能。 首先,我们注意到一个细节描述:“private String uploadContextType;应更正为private String ...

    一个Struts1多文件上传实例(附Form中传List示例)

    本实例主要探讨如何在Struts1中实现多文件上传功能,并结合Form中传递List类型的数据,这对于理解MVC模式下的文件处理和数据传递有重要作用。我们将深入讨论以下几个关键知识点: 1. **Struts1框架基础**: Struts...

    使用Struts2实现文件上传和下载的所有方案

    在本文中,我们将深入探讨使用Struts2实现文件上传和下载的各种方案。 ### 文件上传方案 #### 1. 使用Struts2进行文件普通上传 文件上传的核心是处理`multipart/form-data`类型的表单数据。Struts2通过`Struts2-...

    struts1实现文件上传和下载

    在Struts1中,实现文件上传和下载功能是常见的需求,这对于处理用户提交的文件,如图片、文档等,至关重要。下面将详细解释如何在Struts1中实现这两个操作。 首先,我们关注文件上传。在Struts1中,文件上传主要...

    用struts1实现文件的上传和下载

    要实现文件上传,你需要做以下几步: 1. **配置Struts1 ActionForm**:创建一个继承自Struts1的ActionForm类,添加一个类型为`java.io.File`的字段,用于接收上传的文件。例如,你可以创建一个名为`UploadForm`的类...

    struts1和struts2分别实现文件上传下载功能

    Struts1和Struts2是两个非常著名的Java Web框架,它们都提供了处理文件上传和下载的功能,但实现方式有所不同。本文将深入探讨这两个框架在文件操作方面的具体实现。 首先,让我们了解一下Struts1中的文件上传功能...

    struts2 实现文件批量上传

    1. **文件上传组件**:在Struts2中,我们通常使用`Commons FileUpload`库来处理文件上传。这个库提供了处理多部分HTTP请求的能力,是Java中处理文件上传的标准库。我们需要在Struts2配置文件中引入对应的拦截器`...

    Struts2实现文件上传功能

    下面将详细阐述如何使用Struts2来实现文件上传功能。 1. **Struts2文件上传组件** Struts2框架集成了一个名为`struts2-convention-plugin`的插件,它提供了文件上传的支持。主要依赖于`Commons FileUpload`和`...

    Struts2实现文件的上传下载

    在Struts2中,文件上传主要依赖于`org.apache.struts2.components.FileUpload`组件,这个组件是基于Commons FileUpload库实现的,它能够处理multipart/form-data类型的HTTP请求,这是文件上传所必需的格式。...

    JavaEE Struts文件上传

    1. **配置Struts2 Action**:在Struts2中,我们需要创建一个Action类来处理文件上传请求。这个类通常需要实现`ServletRequestAware`接口,以便可以直接访问HttpServletRequest对象,从中获取上传文件。 2. **添加...

    struts2实现多文件上传下载

    文件上传比较多,多文件上传少一点 文件下载很少的,看似简单,实则不然 网上的Struts2进行的文件下载一般都是单文件或者固定的文件,并没有(很少)实现随意文件的下载的例子 提供多文件上传,上传成功后,提供...

    struts1 文件上传 文件下载

    下面将详细介绍如何使用Struts1实现文件上传和下载,以及涉及到的关键知识点。 **一、文件上传** 1. **表单配置**:在HTML表单中,我们需要使用`&lt;input type="file"&gt;`标签让用户选择要上传的文件。同时,表单需要...

Global site tag (gtag.js) - Google Analytics