现在在网络上有很多关于struts文件上传的文章,但是很多都是直接摘抄struts自带的例子,而且很多都如同一辙,关于多文件上传的更是少之又少。我这几天刚好要做一个多文件上传的DEMO,就自己写了一个多文件上传的例子,不好的地方请大家多多指教。
actionForm采用map来对应上传页面,action采用STRUTS自带的FormFile来联系上传的文件。 我就直接按actionForm,JSP->struts_config->action的顺序来说,程序就列出关键部分,由于时间关系我就不做详细解释了。
actionForm的程序:
public class MutiUploadForm extends ActionForm
...{
protected Map fileMap;
public MutiUploadForm()
...{
fileMap = new HashMap();
}
public Map getFileMap()
...{
return fileMap;
}
public void setFileMap(Map fileMap)
...{
this.fileMap = fileMap;
}
public void setValue(String attributeKey, Object attributeValue)
...{
getFileMap().put(attributeKey, attributeValue);
}
public Object getValue(String attributeKey)
...{
Object keyValue = getFileMap().get(attributeKey);
return keyValue;
}
}
JSP程序:
我就简单的列出了两个文件上传你可以用脚本程序实现文件输入框的自动增加,有时间我再给出这方面的代码。
<html:form action="mutiUpload_act.do" enctype="multipart/form-data">
<html:file property="value(file01)" />
<html:file property="value(file02)" />
<html:submit />
</html:form>
注意:(file02)中的value对应actionform中的setValue(...),是javabean的默认用法。
struts-config.xml:<form-bean name="mutiUploadForm" type="com.hong.upload.web.form.MutiUploadForm"></form-bean><action name="mutiUploadForm" scope="request" type="com.hong.upload.web.action.MutiUploadAction" path="/mutiUpload_act" input="input"></action><forward name="input" path="/mutiUpload.jsp"></forward><forward name="display" path="/display.jsp"></forward>请只参考其中的关键部分:
<action path="/mutiUpload_act"
type="com.hong.upload.web.action.MutiUploadAction"
name="mutiUploadForm"
scope="request"
input="input">
<forward name="input" path="/mutiUpload.jsp" />
<forward name="display" path="/display.jsp" />
</action>
Action的程序:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception
...{
System.out.println("action.....");
if (form instanceof MutiUploadForm)
...{
// 如果form是MutiUploadForm
String encoding = request.getCharacterEncoding();
if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8")))
...{
response.setContentType("text/html;charset=gb2312");
}
MutiUploadForm theForm = (MutiUploadForm) form;
/** *//****************第一个文件***********************/
FormFile file1 = (FormFile) theForm.getValue("file01");// 取得上传的文件
String size1 = (file1.getFileSize() + " bytes");// 文件大小
String fileName1 = file1.getFileName();// 文件名
try
...{
InputStream stream = file1.getInputStream();// 把文件读入
//String filePath = request.getPathInfo();// 取当前系统路径
String filePath = "e:\web\frameDemo";
//ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream bos = new FileOutputStream(filePath + "\"
+ file1.getFileName());
// 建立一个上传文件的输出流,将上传文件存入web应用的根目录。
System.out.println(filePath + "\" + file1.getFileName());
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1)
...{
bos.write(buffer, 0, bytesRead);// 将文件写入服务器
}
bos.close();
stream.close();
}
catch (Exception e)
...{
System.err.print(e);
}
request.setAttribute("size1", size1);
request.setAttribute("fileName1", fileName1);
/** *//*******************第二个文件********************/
FormFile file2 = (FormFile) theForm.getValue("file02");// 取得上传的文件
String size2 = (file2.getFileSize() + " bytes");// 文件大小
String fileName2 = file2.getFileName();// 文件名
try
...{
InputStream stream = file2.getInputStream();// 把文件读入
//String filePath = request.getPathInfo();// 取当前系统路径
String filePath = "e:\web\frameDemo";
//ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream bos = new FileOutputStream(filePath + "\"
+ file2.getFileName());
// 建立一个上传文件的输出流,将上传文件存入web应用的根目录。
System.out.println(filePath + "\" + file2.getFileName());
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1)
...{
bos.write(buffer, 0, bytesRead);// 将文件写入服务器
}
bos.close();
stream.close();
}
catch (Exception e)
...{
System.err.print(e);
}
request.setAttribute("size1", size1);
request.setAttribute("fileName1", fileName1);
request.setAttribute("size2", size2);
request.setAttribute("fileName2", fileName2);
return mapping.findForward("display");
} else
分享到:
相关推荐
文件上传比较多,多文件上传少一点 文件下载很少的,看似简单,实则不然 网上的Struts2进行的文件下载一般都是单文件或者固定的文件,并没有(很少)实现随意文件的下载的例子 提供多文件上传,上传成功后,提供...
Struts2提供了完善的文件上传支持,让我们来详细探讨如何在Struts2中实现多文件上传。 首先,我们需要在Struts2的配置文件(struts.xml)中启用文件上传的支持。这通常涉及到添加`<constant>`标签来设置`struts....
在实现文件上传时,必须注意以下安全问题: 1. **文件类型检查**:限制上传的文件类型,防止恶意用户上传可执行文件或脚本。 2. **文件名重命名**:避免文件覆盖或路径遍历攻击,对上传的文件名进行重命名。 3. **...
要实现文件上传,你需要完成以下步骤: 1. **配置Struts2上传插件**: 在`struts.xml`配置文件中,添加上传插件的配置,确保它启用并指定了临时文件存储路径: ```xml <constant name="struts.multipart....
本篇文章将详细讲解如何利用Struts2.2和Hibernate3.6实现文件的上传与动态下载。 **一、文件上传** 1. **环境配置**:首先,你需要一个集成开发环境,例如MyEclipse8.6,并安装所需的Struts2.21、JUnit4.8.2以及...
在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...
总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。
在Struts2中,实现多文件上传功能是常见的需求,尤其在处理用户需要上传多个文件的场景下,如上传图片、文档等。本篇文章将详细介绍如何使用Struts2来实现这一功能。 首先,我们需要理解Struts2的上传机制。在...
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。
在这个“Struts1实现的文件上传”项目中,我们将深入探讨如何在Struts1框架下实现文件上传功能,并不涉及文件下载的部分。 首先,理解文件上传的基本流程是至关重要的。在Web应用中,用户通过HTML表单选择本地文件...
在 Struts 2 中实现文件上传,首先需要在 JSP 页面创建一个支持多部分数据的表单。例如,在 `FileUpload.jsp` 文件中,表单的 `method` 应设置为 `POST`,`enctype` 应设置为 `multipart/form-data`。此外,使用 `...
在Struts1中实现文件上传,我们需要考虑前端的HTML表单、ActionForm、Struts配置文件以及后台的Action处理。 首先,前端实现是通过一个支持多文件选择的HTML表单来完成的。表单需要设置`enctype="multipart/form-...
1. **文件上传组件**:在Struts2中,我们通常使用`Commons FileUpload`库来处理文件上传。这个库提供了处理多部分HTTP请求的能力,是Java中处理文件上传的标准库。我们需要在Struts2配置文件中引入对应的拦截器`...
在Struts2文件上传中,通常会有一个成员变量用于存储上传文件的MIME类型,这个变量的名称应该是`uploadContentType`而不是`uploadContextType`。尽管这个错误并不会导致程序无法运行,但修正它能提高代码的可读性和...
在Struts1.2中实现动态多文件上传是一项常见的需求,它允许用户在一次提交中上传多个文件,如图片、文档等。这项功能的实现涉及前端表单设计、后端处理逻辑以及文件存储策略。 首先,我们需要创建一个HTML或JSP页面...
通过分析和学习这些代码,你可以更好地理解和掌握Struts1中多文件上传和表单中传递List的实践方法。 总之,这个实例提供了关于Struts1中文件上传和复杂表单数据处理的实战经验,对于学习Java Web开发和Struts1框架...
在Struts1框架中实现文件上传功能是一项常见但又具有一定技术挑战的任务。下面将详细解析文件上传的实现过程,包括关键类的使用、文件处理逻辑以及异常处理等方面。 #### Struts1框架简介 Struts1是Apache Struts的...
在本文中,我们将深入探讨这两个组件以及如何将它们整合以实现文件上传。 首先,Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它提供了一种组织和管理Web应用的方式,使得开发者可以更...
Struts2是一个强大的Java web框架,它...通过以上步骤,你就可以在Struts2框架中实现多文件上传的功能。注意,实际开发中还需要考虑文件重命名、存储路径的安全性、异常处理等问题,确保文件上传操作的稳定性和安全性。
在Struts2中,文件上传主要依赖于`org.apache.struts2.components.FileUpload`组件,这个组件是基于Commons FileUpload库实现的,它能够处理multipart/form-data类型的HTTP请求,这是文件上传所必需的格式。...