`
wanglei2999
  • 浏览: 21836 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts1 上传附件

阅读更多
在Web程序中的上传文件的功能一般会使用<input type=file.../>标签在客户端显示输入要上传的文件名的用户接口。如果读者使用过JSP/Servlet来处理客户端上传的文件就会知道,实现这个功能并不是很容易。而在Struts中为我们提供了一种机制,可以非常方便地将客户端上传的文件保存在服务端。

    在Struts Html标签库中提供了一个<html:file>标签,可以和FormFile类型的属性一起使用。通过这个属性返回的FormFile对象,就可以很方便地获得上传文件的InputStream对象,并做进一步地处理。

    在Struts中,一个FormFile对象代表一个上传的文件。FormFile实际上是一个接口,我们可以在org.apache.struts.upload包中找到这个接口。FormFile接口有如下五个常用的方法:

    1. getInputStream()方法

    这个方法用于获得上传文件的java.io.InputStream对象,我们可以从这个InputStream对象中读取上传文件的数据,并将其写到服务端指定的路径下。

    2. getFileData()方法

    这个方法用于将上传文件的整个内容放到一个byte类型的数组中,如果上传文件的尺寸比较小的话,使用这个方法可以很方便地将上传文件保存到在服务端的指定路径中。

    3. getFileName()方法

    这个方法用于获得上传文件的文件名(不包括文件在客户机的路径部分)。

    4. getFileSize()方法

    这个方法用于获得上传文件的字节数。

    5. destroy()方法

    用于销毁所有和当前上传文件相关的资源。

   下面的例子演示了如何使用<html:file>标签和FormFile对象来上传单个文件。实现这个例子需要如下六步:

【第1步】建立上传文件的JSP页面

    在<samples工程目录>目录中建立一个uploadFile.jsp文件,代码如下:

   
  <%@ page pageEncoding="GBK"%>

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

  <html>

    <head>

      <title>上传单个文件(文件大小不能超过2M) </title>

    </head>

    <body>

<%-- 在<html:form>标签中必须加enctype="multipart/form-data"  --%>

      <html:form enctype="multipart/form-data" action="uploadFile">

        <html:file property="myFile"/><p>  <%-- 使用<html:file>标签让用户输入上传文件名  --%>

        <html:submit value="上传"/>

      </html:form>

    </body>

  </html>
【第2步】建立ActionForm的子类

    在<samples工程目录>"src"actionform目录中建立一个UploadForm.java文件,代码如下: 


package actionform;

   import org.apache.struts.action.*;

  import org.apache.struts.upload.FormFile;

   public class UploadForm extends ActionForm

  { 

      private FormFile myFile;  // 这个myFile代表要上传的文件

        public FormFile getMyFile()

      {

          return myFile;

      }

      public void setMyFile(FormFile myFile)

      {

          this.myFile = myFile;

      }
}

【第3步】建立Struts动作类(Action的子类)

    在Struts中,一般在Struts的动作类中处理上传的文件。在<samples工程目录>"src"action目录中建立一个UploadAction.java文件,代码如下:

 


package action;

  import javax.servlet.http.*;

  import org.apache.struts.action.*;

  import org.apache.struts.upload.FormFile;

  import java.io.*;

  import actionform.*;

  public class UploadAction extends Action

  {

      protected void saveFile(FormFile formFile) throws Exception

      {

          // 从web.xml文件中获得指定的上传路径

          String path = this.getServlet().getServletConfig().getInitParameter("uploadPath");

          InputStream in = formFile.getInputStream();   // 获得上传文件的InputStream

          // 在服务端指定的上传路径中建立一个空的文件(文件名为getFileName()方法返回的值)

          FileOutputStream fout = new FileOutputStream(path + formFile.getFileName());  

          byte buffer[] = new byte[8192]; 

          int count = 0;

          //  开始向上传路径中刚建立的文件写入数据,每次写8k字节

          while ((count = in.read(buffer)) > 0)

          {

              fout.write(buffer, 0, count);

          }

          fout.close();

          formFile.destroy();   // 上传成功后,销毁当前上传文件的资源

      }

      public ActionForward execute(ActionMapping mapping, ActionForm form,

              HttpServletRequest request, HttpServletResponse response)

      {

          UploadForm uForm = (UploadForm) form;

          PrintWriter out = null;

          try

          {

              response.setCharacterEncoding("GBK");

              out = response.getWriter();

              saveFile(uForm.getMyFile());  // 将上传文件保存到指写的路径(在web.xml中配置)

              out.println("上传文件成功.");

          }

          catch (Exception e)

          {

              out.println(e.getMessage());

          }

          return null;

      }

  }
在saveFile方法中,首先从web.xml的Servlet初始化参数中获得一个用于保存上传文件的路径。然后从FormFile对象中获得上传文件的InputStream对象,并对这个InputStream对象中的字节进行循环读取,并写到新的文件中。最后,在上传成功后,将FormFile 对象销毁。

【第4步】配置struts-config.xml

    在这一步来配置一下在第2步和第3步分别建立的ActionForm和Action的子类。打开struts-config.xml文件,在<form-beans>中加入如下的子标签:

<form-bean name="uploadForm" type="actionform.UploadForm" />   

在<action-mappings>中加入如下的子标签:

<action name="uploadForm" path="/uploadFile" scope="request" type="action.UploadAction" />

【第5步】设置用于保存上传文件的路径

    打开web.xml文件,找到一个叫action的Servlet(也就是用于处理Struts动作的Servlet),并在<servlet>中加入如下的子标签(假设保存上传文件的路径为D:"upload",路径的最后一个字符必须是“"”):

<init-param>

    <param-name>uploadPath</param-name>

    <param-value>D:\upload\</param-value>

</init-param>

【第6步】限制上传文件的大小

    这一步是可选的,如果不限制上传文件的大小,就意味着可以上传任意大小的文件。而一般的应用程序,如电子相册,网络硬盘都会限制上传文件的最大尺寸。

    打开struts-config.xml文件,在<struts-config>中加入如下的子标签:

  <controller maxFileSize="2M" />

上面的<controller>标签将上传文件的最大尺寸设为2M,maxFileSize属性值的单位可以是M,也可以是K或G,如2K,5G等。

    启动Tomcat后,在IE中输入如下的URL来测试程序:
分享到:
评论

相关推荐

    解决struts组件上传附件速度很慢的问题

    总的来说,解决Struts组件上传附件速度慢的问题需要从多个角度出发,包括但不限于服务器配置、网络环境、浏览器兼容性和应用代码优化。通过综合调整,可以有效地改善用户体验,提高文件上传的速度和效率。

    struts多附件上传

    在"struts多附件上传"这个主题中,我们将深入探讨如何使用Struts框架实现多个文件的上传功能。 一、Struts框架基础 1. Struts框架的核心组件包括Action、ActionForm、ActionMapping和Result。Action处理用户请求,...

    struts 附件上传 仿照163样式 实例

    在"struts 附件上传 仿照163样式 实例"中,我们主要探讨的是如何使用 Struts 框架来实现在Web应用中上传附件的功能,并且在界面上模仿163邮箱的风格。 首先,了解Struts的上传组件。在Struts1中,通常使用`org....

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

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

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

    在这个特定的场景中,我们关注的是如何使用Struts来实现文件的上传和下载功能。这个功能对于任何Web应用来说都是非常重要的,因为它允许用户交互地处理数据和资源。 首先,我们需要理解文件上传的基本流程。在...

    struts框架-文件上传下载

    1. Struts1中的文件上传:在Struts1中,文件上传主要依赖于`commons-fileupload`和`commons-io`两个库。首先需要在`struts-config.xml`中配置`action`元素,启用流处理。然后在表单中使用`&lt;html:file&gt;`标签指定上传...

    struts2上传下载项目

    在"struts2上传下载项目"中,我们可以深入理解如何利用Struts2实现文件的上传与下载功能。 首先,上传功能在Web应用中十分常见,比如用户在注册时上传头像,或者提交文档等。在Struts2中,我们主要借助`struts2-...

    struts上传文件(图片/附件)

    struts上传文件(图片/附件),希望对初学struts的同学们有帮助。如果有事么不足,请大家多指教。

    struts1实现文件上传和下载

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

    使用UEditor实现富文本编辑图片上传附件上传实例

    1、内含两个文件:①、UEditorDemo.rar ②、UEdtior的简单使用.doc;...5、最后一点是提示:如果要把UEditor使用在struts中,要重写web.xml中所有过滤.jsp或者.*的过滤器,不然上传图片和文件会失败。

    基于Struts1.2的上传下载Demo

    1. **上传过程**: - 在JSP页面中,使用`&lt;html:form&gt;`标签,并设置`enctype="multipart/form-data"`以支持文件上传。 - 定义一个`&lt;html:file&gt;`标签,让用户选择要上传的文件。 - 创建一个ActionForm,添加一个`...

    Struts2 上传和下载功能

    在Struts2中,实现文件上传和下载是常见的需求,对于用户交互和数据交换至关重要。这篇博客文章可能详细讨论了如何在Struts2框架中实现这两个功能。 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,这是...

    struts上传与下载

    2. **Action类**:在Struts的Action类中,编写处理下载请求的方法,获取要下载的文件路径,并设置响应头信息,包括Content-Disposition(指示浏览器如何显示文件,例如作为附件下载)和Content-Type(指定文件类型)...

    struts2 上传文件及打包下载zip

    在这个"struts2 上传文件及打包下载zip"的示例中,我们将探讨如何利用Struts2实现文件上传和下载功能。 首先,文件上传是Web应用程序中的常见需求。在Struts2中,我们可以使用`Struts2`提供的`CommonsFileUpload`...

    struts2文件上传下载

    struts2文件上传与下载, &lt;s:fielderror&gt;&lt;/s:fielderror&gt; 文件"&gt;&lt;/s:file&gt; &lt;s:submit id="submit" value="sbumit"&gt;&lt;/s:submit&gt; &lt;/s:form&gt;

    struts实现文件上传和下载源代码

    例如,Struts 1和Struts 2在处理文件上传和下载的方式上有显著区别,Struts 2引入了更多面向Action的API和拦截器机制。 5. **源代码分析** 在提供的压缩包文件`upload`中,可能包含了Action类、Struts配置文件、...

    struts2实现文件上传(单个+多个文件上传

    struts2实现文件上传(单个+多个文件上传

    用Struts框架实现多文件上传功能(初学者的入门项目案例)

    1. **配置Struts2上传插件**: 在`struts.xml`配置文件中,添加上传插件的配置,确保它启用并指定了临时文件存储路径: ```xml &lt;constant name="struts.multipart.saveDir" value="/path/to/your/temp/directory...

    struts图片上传与下载

    在Struts框架中处理图片上传和下载是常见的需求,这通常涉及到用户界面交互、文件存储、数据库操作等多个环节。本文将深入探讨Struts中图片的上传与下载流程,并结合SQL数据库的使用,为开发者提供实用的指导。 **1...

    struts1 实现文件上传下载

    在Struts1中实现文件上传和下载是常见的需求,这通常涉及到用户通过Web界面交互地上传文件到服务器,或者从服务器下载文件到本地计算机。 一、文件上传 1. **配置ActionForm**:首先,你需要创建一个继承自Struts...

Global site tag (gtag.js) - Google Analytics