一、最简单的方式:
设置表单form 的 method=”post” ENCTYPE="multipart/form-data"
通过
InputStream in =servletRequest.getInputStream();
以流的方式处理,它的缺点就不言而喻了
二、commons-fileupload:
官方网站:[http://jakarta.apache.org/commons/fileupload/
]
它提供基于Servlet的上传,可上传到内存、文件,且文件的上传位置,最大上传文件字节数可以在程序中设置,
特别是对于多文件上传支持较好,List items = upload.parseRequest(request)就可以处理多文件,其他都不用考虑,
提供了item.isFormField()判断是否为标准表单值的方法,简洁实用,但是可配置仍然不好,对API的依赖性很大
使用步骤:
1、首先判断一个HttpServletRequest是否是一个上传文件的请求:
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
2、处理请求:
2.1、创建基于硬盘存储的工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
/* 或者
DiskFileItemFactory factory = new DiskFileItemFactory(yourMaxMemorySize, yourTempDirectory);
*/
2.2、设置工厂属性,从而生成个性化ServletFileUpload
//设置最多只允许在内存中存储的数据,单位:字节
factory.setSizeThreshold(yourMaxMemorySize);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
factory.setRepository(yourTempDirectory);
2、处理上传文件:
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
//判断是否为标准表单域
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
…
} else {
String fieldname = item.getFieldName();
String filename = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
…
//直接从内存访问上传数据
byte[] data = item.get();
//采用流方式读取上传文件
InputStream stream = item.openStream();
// 保存到文件
if (writeToFile) {
File uploadedFile = new File(storeFilePath);
item.write(uploadedFile);
} else {
//转换为输出流
InputStream uploadedStream = item.getInputStream();
...
uploadedStream.close();
}
}
...
三、javazoom的UploadBean:
官方网站:[http://www.javazoom.net/jzservlets/uploadbean/uploadbean.html
]
功能强大,支持上传到文件系统,数据库,同时它还有一些高级功能,如对上传的监听,overwrite过滤器、自定义解析器、
overwrite策略、黑名单、白名单等,特别是它采用了JavaBean方式,所以在JSP页面可以轻松的采用
<jsp:useBean id="upBean" scope="page" class="javazoom.upload.UploadBean" >
<jsp:setProperty name="upBean" property="folderstore" value="c:/uploads" />
</jsp:useBean>
从而实现上传到硬盘目录但是它的源代码是需要Money的,我们只能得到它的jar包和API Doc,
同时它对多文件上传处理的不是很好(我觉得)。
官方网站上有详细的说明供参考。
四、Jspsmartupload
官方网站:[http://www.jspsmart.com
] 可惜一直打不开
这里有一篇文章说明:[http://java.ccidnet.com/art/3737/20060717/638255_1.html
]
分享到:
相关推荐
这篇文章将详细介绍Bootstrap中一些功能强大、易于使用的组件,并将这些组件作为“福利”推荐给需要的读者。 文章首先提到了Bootstrap框架中的表格、表单验证、文件上传、复选下拉框、弹出框等常用组件。这些组件...
本篇将深入探讨如何创建一个可动态布局的Android抽屉组件,提供一个完整的实现案例源码。 首先,抽屉组件的基本概念:DrawerLayout是Android提供的一个视图容器,它可以包含两个主要区域——主内容视图和一个或多个...
组件(Component)是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以是原生 HTML 元素的形式,...
这篇博文“编写JSF用户自定义UI组件(之五)”可能深入探讨了如何创建和使用自定义组件的过程,虽然描述部分为空,但我们可以基于标题推测其主要内容。 1. **JSF组件体系结构**:JSF组件是由UIComponent类及其子类...
Bootstrap是世界上最流行的前端开发框架之一,以其响应式布局和易于使用的组件而著名。在AXURE RP 8中,Bootstrap风格库包含了许多与Bootstrap框架兼容的组件,如按钮、表单、导航栏、网格系统等。这些组件的特点...
Vue.js 的组件系统是其强大之处,而组件的内容分发(slot)机制则是实现组件复用和组合的关键特性。在 Vue 中,slot 提供了一种方式,使得父组件能够将内容传递给子组件,然后在子组件内部进行展示。本文将深入探讨...
本篇文章将深入探讨“flex组件之格式化组件实例源码”,并分析其中包含的7个实例。 首先,格式化组件在Flex中扮演着关键角色,它们主要用于数据的显示和输入格式化。例如,日期、时间、数字和货币等数据类型通常...
这个UI布局通常是填充屏幕的,也可能小于该窗口或者是浮动在其他窗口之上.一般来说,在app中一个Activity实现一个布局屏幕.比如:一个app程序会有设置界面这样的填充整个window的Activity,也存在选择相册
在本篇“bootstrap读书笔记之CSS组件(上)”中,我们将深入探讨Bootstrap中的CSS组件,特别是图标、下拉菜单和按钮组。 一、图标字体 Bootstrap 3 包含了超过200个免费的Glyphicons图标,这些图标实际上是一种...
这篇文档深入浅出地介绍了如何在Flash环境中有效地利用这些组件,旨在帮助开发者提升交互设计和动态内容创建的技能。以下是该文档可能包含的一些关键知识点: 1. AS3.0基础:AS3.0是ActionScript语言的一个重大升级...
中间件是运行在操作系统之上,提供应用程序之间通信、资源管理和业务逻辑抽象的一类软件。ORB是对象请求代理的缩写,属于中间件的一种,它为分布式对象系统提供通信能力。EJB容器管理着EJB组件的生命周期,处理事务...
Vue.js组件是Vue框架的核心特性之一,它允许开发者将UI拆分成可重用的模块,提高了代码的可维护性和复用性。在本篇中,我们将深入探讨Vue.js组件的几个关键概念,包括插槽、作用域以及具名插槽。 首先,插槽(Slot)...
该上传类的独特之处在于它有效地防止了网络上广泛存在的工具注入漏洞,提供了一种相对安全的文件上传解决方案。 首先,让我们深入了解上传类的工作原理。上传类通常处理用户通过Web表单提交的文件,将其从客户端...
本篇文章将深入探讨这两种组件的区别、应用场景以及它们之间的联系。 首先,让我们来理解函数组件。函数组件,也称为无状态组件,是React中最简单的组件形式。它本质上是一个JavaScript函数,接收props(属性)作为...
本篇文章将深入探讨ASP邮件组件的工作原理、常见组件及其运用方法。 1. **SMTP服务**:SMTP(Simple Mail Transfer Protocol)是互联网上用于发送电子邮件的标准协议。在ASP中,若服务器已经配置了SMTP服务,如IIS...
在IT行业中,文件上传组件是Web应用中常见且重要的功能之一,它允许用户将本地的文件上传到服务器,实现数据的交互。这篇博客“文件上传组件的编写”可能详细介绍了如何从零开始创建一个这样的组件,包括源码解析和...
本篇文章将深入探讨Vue2和Vue3在使用上的主要区别以及组件通信的方法。 ### Vue2与Vue3的区别 #### 1. Composition API Vue2 使用的是 Options API,所有组件选项如 data、methods、computed 等都直接在组件选项...
"MPLAB Harmony 3之基础篇(38)-- 利用PMSM_FOC组件加速电机控制应用开发" MPLAB Harmony 3是一个基于PIC32MX微控制器的软件框架,旨在帮助开发者快速开发基于PIC32MX的应用程序。PMSM_FOC组件是Harmony 3中的一个...
本篇将深入探讨如何在Vue移动端项目中实现H5表格组件。 一、Vue与H5表格组件基础 1. Vue组件化思想:Vue的核心特性之一是组件化,它允许我们将UI拆分成可复用的模块。在移动端H5表格场景中,我们可以创建一个独立...
这篇教程——"FLASH四宝贝之-使用ActionScript 3.0组件",将带你深入探索如何利用ActionScript 3.0来操作和自定义组件,提升你的Flash创作能力。 首先,ActionScript 3.0是Adobe Flash Professional中的核心组成...