在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来测试程序:
http://localhost:8080/samples/...
分享到:
相关推荐
### Struts1 文件上传知识点详解 #### 一、概述 在Web开发中,文件上传是一项常见功能。Apache Struts框架提供了强大的支持来进行文件上传。本文将详细介绍如何在Struts1中实现单文件上传和多文件上传,并探讨如何...
Struts1的fileupload的文件上传
在Struts1中,文件上传和下载是常见的功能,尤其在处理用户交互和数据交换时非常有用。下面将详细介绍如何使用Struts1实现文件上传和下载,以及涉及到的关键知识点。 **一、文件上传** 1. **表单配置**:在HTML...
在这个"struts1文件上传的例子"中,我们将深入探讨如何在Struts1框架下实现文件上传的功能。 首先,文件上传在Web开发中是一个常见的需求,例如用户可能需要上传图片、文档或其他类型的文件。在Struts1中,这通常...
Struts1文件上传小项目是一个基于Java Web技术的实践应用,它主要利用了Struts1框架、Hibernate ORM工具以及基础的增删改查操作来处理文件上传功能。在这个项目中,我们将深入探讨这些关键技术点,了解如何将它们...
### Struts1 实现文件上传的关键技术点 在Struts1框架中实现文件上传功能是一项常见但又具有一定技术挑战的任务。下面将详细解析文件上传的实现过程,包括关键类的使用、文件处理逻辑以及异常处理等方面。 #### ...
在Struts1中实现文件上传功能,常常是Web开发中的一个常见需求。而“带进度条”的文件上传则更进一步,它能为用户提供更好的用户体验,让用户在上传大文件时能够看到实时的上传进度。 首先,我们来理解一下Struts1...
Struts1和Struts2是两个非常著名的Java Web框架,它们都提供了处理文件上传和下载的功能,但实现方式有所不同。本文将深入探讨这两个框架在文件操作方面的具体实现。 首先,让我们了解一下Struts1中的文件上传功能...
1. **配置Struts2 Action**:在`struts.xml`配置文件中,你需要定义一个Action,该Action负责处理文件上传请求。Action的类需要继承自`ActionSupport`,并覆盖`execute()`方法,以便处理上传的文件。 2. **设置...
在这个“Struts1实现的文件上传”项目中,我们将深入探讨如何在Struts1框架下实现文件上传功能,并不涉及文件下载的部分。 首先,理解文件上传的基本流程是至关重要的。在Web应用中,用户通过HTML表单选择本地文件...
Apache Commons FileUpload库是Struts1中处理文件上传的关键,它可以解析请求中的多部分内容,将文件内容分离出来并存储到服务器的临时目录。 要实现文件上传,你需要做以下几步: 1. **配置Struts1 ActionForm**...
本实例主要探讨如何在Struts1中实现多文件上传功能,并结合Form中传递List类型的数据,这对于理解MVC模式下的文件处理和数据传递有重要作用。我们将深入讨论以下几个关键知识点: 1. **Struts1框架基础**: Struts...
1. **配置Struts2的文件上传** 在`struts.xml`配置文件中,为需要支持文件上传的Action添加`params`和`fileUpload`拦截器,并设置允许的最大上传大小。例如: ```xml ...
这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件上传的基本流程。当用户通过表单提交包含文件输入字段的请求时,Struts2框架会...
在这个“Struts1实现文件上传源码”实例中,我们将深入探讨如何利用Struts1框架来处理文件上传操作。 在Web应用中,文件上传功能是非常常见的,比如用户上传头像、提交文档等。Struts1提供了ActionForm类和一系列...
1. **配置Struts2 Action**:在Struts2中,我们需要创建一个Action类来处理文件上传请求。这个类通常需要实现`ServletRequestAware`接口,以便可以直接访问HttpServletRequest对象,从中获取上传文件。 2. **添加...
在Struts中,可以实现单文件和多文件的上传,并且为了提升用户体验,我们还可以添加进度条来显示文件上传的状态。本文将详细介绍如何在Struts中实现这两个功能,并带上传进度条。 首先,我们需要了解Struts中处理...
在Struts 1中,文件上传是一个常见的功能,它允许用户通过网页表单上传文件到服务器。这个源码包可能是为了帮助开发者理解如何在Struts 1框架下实现文件上传功能。 在Struts 1中,文件上传通常涉及到以下几个核心...