前台jsp页:
<script language="javascript" type="text/javascript">
function createElement(tagName, type, name)
{
var element = null;
try
{
element = document.createElement('<' + tagName + ' name="'+name+'" size=30 onchange="add();"/>');
element.type = type;
element.value = value;
}
catch (e)
{
}
if ( ! element)
{
element = document.createElement(tagName);
element.setAttribute("type", type);
}
return element;
}
// 动态创建表单控件的方法
var i = 1;
function add()
{
// 动态创建控件名称
var name = "attachment" + i;
var input1 = createElement("input", "file", name);
var br = document.createElement("<br />");
var files = document.getElementById("files");
files.appendChild(br);
files.appendChild(input1);
i ++ ;
}
</script>
<!--
************************
附件
************************
-->
<div id="files">
<input type="file" size="30" name="attachment0" onchange="add();" alt="选择后即可动态添加文件域"/>
<input type="button" onclick="add();" value="多个附件" alt="手动添加文件域"/>
<font color=green><a alt="不支持的文件类型将会被直接过滤掉">支持的文件类型(.rar,.zip,.txt,.sql,.ini,.jpg,.bmp,.gif)</a></font>
</div>
Action中的关键代码:
FormFile[] formFile = null;
// 得到所有的文件请求元素
Hashtable files = bbsForm.getMultipartRequestHandler()
.getFileElements();
if (files != null && files.size() > 0)
{
// 初始化FormFile
formFile = new FormFile[files.size()];
// 得到files的keys
Enumeration enums = files.keys();
String fileKey = null;
int i = 0;
// 遍历枚举
while (enums.hasMoreElements())
{
// 取得key
fileKey = (String) (enums.nextElement());
System.out.println("key:" + fileKey);
// 初始化每一个FormFile(接口)
formFile[i] = (FormFile) files.get(fileKey);
// 分别上传
upload(formFile[i], request, bbs);
i++;
}
}
upload方法:
/**
* 文件上传的方法
*
* @param file
* @param request
* @param bbs
*/
public void upload(FormFile file, HttpServletRequest request, Bbs bbs)
{
//只有选择了文件时才上传
if ("".equals(file.getFileName()) || null == file.getFileName())
{
return ;
}
// 得到当前网站的绝对路径
String path = this.getServlet().getServletContext().getRealPath("/");
FileOutputStream fileOutput;
try
{
// 文件操作
fileOutput = new FileOutputStream(path + "main/upload/"
+ file.getFileName());
fileOutput.write(file.getFileData());
fileOutput.flush();
fileOutput.close();
log.info("BbsAction:附件上传成功");
}
catch (FileNotFoundException e)
{
log.info("BbsAction:找不到文件");
}
catch (IOException e)
{
log.info("BbsAction:文件IO异常");
}
// 数据库操作
Fileupload fileupload = new Fileupload();
String basePath = request.getScheme() + "://" + request.getServerName()
+ ":" + request.getServerPort() + request.getContextPath()
+ "/";
fileupload.setFilename(basePath + "/main/upload/" + file.getFileName());
// 得到文件的扩展名
int point = file.getFileName().lastIndexOf(".");
String ext = file.getFileName().substring(point + 1);
//扩展名处理
if ("jpg".equals(ext.toLowerCase()) || "bmp".equals(ext.toLowerCase())
|| "gif".equals(ext.toLowerCase()))
{
ext = "img";
}
if ("rar".equals(ext.toLowerCase()) || "zip".equals(ext.toLowerCase())
|| "jar".equals(ext.toLowerCase()))
{
ext = "rar";
}
if("txt".equals(ext.toLowerCase()) || "sql".equals(ext.toLowerCase()) || "ini".equals(ext.toLowerCase()))
{
ext = "txt";
}
fileupload.setFileext(ext);
fileupload.setFilesize(file.getFileSize());
fileupload.setUptime(new Date());
fileupload.setDowncount(0);
fileupload.setUpuser(((User) request.getSession().getAttribute("user"))
.getUserName());
fileupload.setFlag((short) 0);
fileupload.setAnnounceId(bbs.getAnnounceId());
fileupload.setName(file.getFileName());
fileuploadManager.save(fileupload);
log.info("BbsAction:附件信息已经成功保存到数据库");
}
这样就实现的动态的多文件上传.关键还是
引用
Hashtable files = bbsForm.getMultipartRequestHandler().getFileElements();
的处理.
其中的数据库操作部分不是必须的.
如果: bbsForm.getMultipartRequestHandler().getFileElements();
得到的 size为1, 则须检查是否设置了form类型
enctype="multipart/form-data"
如果
this.getServlet().getServletContext()
获取不到ServletContext, 可以使用下面方法获取(此问题一般在SSH中会碰到,因为一般配置文件中为:
<action type="org.springframework.web.struts.DelegatingActionProxy" .../>).
ServletContext context = request.getSession().getServletContext();
转自:
http://www.blogjava.net/supercrsky/articles/178722.html
分享到:
相关推荐
在Struts1.2中实现动态多文件上传是一项常见的需求,它允许用户在一次提交中上传多个文件,如图片、文档等。这项功能的实现涉及前端表单设计、后端处理逻辑以及文件存储策略。 首先,我们需要创建一个HTML或JSP页面...
Struts1.2驱动包是Java Web开发中一个重要的组件,它是Apache Struts框架的特定版本,用于支持基于Model-View-Controller (MVC)设计模式的应用程序开发。Struts1.2因其稳定性和广泛的功能集而在过去备受推崇,尤其在...
在这个"struts1.2简单文件上传例子"中,我们将深入探讨Struts1.2框架如何处理文件上传功能。 首先,文件上传在Web应用中是一个常见的需求,例如用户可能需要上传个人头像、文档或者其他类型的数据。在Struts1.2中,...
在Struts1.2中实现这一功能需要涉及多个步骤和技术。下面将详细阐述如何在Struts1.2环境下实现图片上传。 首先,我们需要在ActionForm类中创建一个File类型的属性,用于接收用户上传的图片文件。例如: ```java ...
总结,Struts1.2使用FormFile实现批量上传涉及前端表单构建、后端ActionForm设计、服务器端文件处理逻辑以及配置文件的修改等多个环节。理解并掌握这些知识点,可以帮助开发者高效、安全地实现在Struts1.2环境中处理...
其次,`struts-1.2.4-lib`是一个包含Struts1.2运行所需库文件的压缩包。这个文件夹通常会包含如commons-logging、commons-beanutils、commons-digester、commons-collections、xerces等Apache Commons库,以及其他的...
在Struts1.2中,文件上传主要依赖于一个名为`commons-fileupload`的Apache Commons库,这个库提供了处理HTTP多部分请求(用于上传文件)的能力。在ActionForm中,我们需要定义一个`File`类型的属性来接收上传的文件...
4. `webapps`目录:可能包含一个或多个预配置的Web应用程序,演示了Struts1.2框架的使用。 在JSP中使用Struts1.2,你需要完成以下步骤: 1. **配置Web.xml**:这是每个Servlet应用的核心配置文件,你需要在这里...
Struts1.2是Apache软件基金会的Jakarta项目下的一个开源框架,主要用于构建基于Java的Web应用程序。这个框架提供了一种组织应用结构和控制应用程序流程的方式,极大地简化了MVC(Model-View-Controller)模式的实现...
在Eclipse 3.2环境下,这个项目可以导入为一个动态Web项目,并配置Tomcat 5.5作为服务器。运行时,需要确保Oracle 11g数据库已经安装并配置好,数据库连接信息与Hibernate配置一致。通过调试和运行,开发者可以了解...
Struts1.2是该框架的一个早期版本,虽然现在已经被Struts2所取代,但在许多遗留系统中仍然广泛使用。本教程将深入探讨Struts1.2的核心概念、功能以及与Struts2的区别。 一、Struts框架基础 1. **MVC模式**:Struts...
Struts1.2是Apache软件基金会的Jakarta项目下的一个开源框架,主要用于构建基于Java的Web应用程序。这个框架的核心是Model-View-Controller(MVC)设计模式,它提供了一种结构化的、可扩展的方式来组织和管理应用的...
7. **国际化和本地化支持**:Struts1.2提供了对多语言环境的支持,通过资源包(properties文件)可以轻松地实现内容的本地化。 8. **Plug-in架构**:Struts1.2允许扩展其功能,开发者可以通过编写插件来添加新的...
5. **国际化与本地化**:Struts 1.2支持多语言环境,通过资源文件可以轻松实现应用的国际化。 6. **异常处理**:提供了全局的异常处理机制,可以统一处理应用程序中的异常,提高代码的可维护性。 7. **配置管理**...
在"Struts1.2 多文件上传下载"这个主题中,我们将深入探讨如何使用Struts1.2实现多个文件的上传和下载功能。 首先,文件上传功能在Web应用中很常见,例如用户可能需要上传个人照片、文档或其他媒体文件。在Struts...
Struts1.2是Apache软件基金会的一个开源框架,主要用于构建基于Java的企业级Web应用程序。它遵循Model-View-Controller(MVC)设计模式,提供了一种结构化的方式来组织应用程序的业务逻辑、用户界面和控制流程。这个...
Struts1.2标签是Java Web开发中Struts框架的一部分,它提供了一种在JSP页面中更加便捷、可维护的方式来处理业务逻辑和控制流程。Struts1.2标签库大大简化了视图层的开发,使开发者可以避免过多地在JSP中编写Java脚本...
在基于Struts 1.2的Web应用中,实现文件上传时常常需要提供一个友好的用户界面来显示文件上传进度。这不仅提高了用户体验,还能够实时反馈上传状态,减少用户的等待焦虑。 #### 二、技术栈 为了实现在Struts 1.2...
Struts 1.2支持多个模块配置,模块名称通常以`config/`开头,例如`config/user`表示用户模块。每个模块的配置信息(ModuleConfig和MessageResources)会以模块名称作为标识存储在ServletContext中,方便后续请求的...
这种结合使得前端能够动态地更新数据,同时利用 Struts1.2 的强大控制能力处理复杂的业务流程。 文件名为 "bysj2" 的压缩包可能包含了该图书管理系统的源代码、配置文件、数据库脚本等相关资源。解压后,开发者可以...