`
kawaii_xw
  • 浏览: 46734 次
  • 性别: Icon_minigender_2
  • 来自: 西安
社区版块
存档分类
最新评论

组件之上传下载篇

阅读更多

一、最简单的方式:
设置表单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 ]

 

 

分享到:
评论
1 楼 jamesby 2007-01-23  
不错,我现在用smartupload,但是想该成用Spring MVC的upload

相关推荐

    Vuejs第十二篇之动态组件全面解析

    本篇资料是小编参考官方文档的基础上整理的一篇更加细致的说明,代码更多更全,非常适合新手学习。 官方文档: http://cn.vuejs.org/guide/components.html#u52A8_u6001_u7EC4_u4EF6 动态组件介绍如下所示: ①简单...

    Vuejs第十三篇之组件——杂项

    本篇资料是小编参考官方文档的基础上整理的一篇更加细致的说明,代码更多更全,非常适合新手学习。 官方文档: http://cn.vuejs.org/guide/components.html#u52A8_u6001_u7EC4_u4EF6 组件——杂项详细介绍如下所示...

    Vuejs第八篇之Vuejs组件的定义实例解析

    组件(Component)是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以是原生 HTML 元素的形式,...

    React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)

    本篇文章主要介绍了React-Native实现ListView组件之上拉刷新实例(iOS和Android通用),具有一定的参考价值,有兴趣的可以了解一下

    Vuejs第十一篇组件之slot内容分发实例详解

    组件(Component)是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以是原生 HTML 元素的形式,...

    JS组件系列之MVVM组件构建自己的Vue组件

    前言:转眼距离上篇 JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少。经过这几个月的时间,Vue的发展也是异常迅猛...

    iOS应用架构谈组件化方案

    前几天的一个晚上在infoQ的微信群里,来自蘑菇街的Limboy做了一...而且觉得这个组件化方案太简单,包括实现组件化方案的组件也很简单,代码算上注释也才100行,我就偷懒放过了,毕竟写一篇文章好累的啊。本文的组件化方

    Android开发之时间日期组件用法实例

    继上一篇时间和日期设置的示例之后,今天来介绍Android的布局组件中有关于时间和日期的设置的组件,希望对大家有所帮助。具体如下: 时间日期设置组件:TimePicker、DatePicker 在布局文件中直接可以添加到我们的...

    Vue学习笔记进阶篇之函数化组件解析

    在这个例子中,我们标记组件为 functional, 这意味它是无状态(没有 data),无实例(没有 this 上下文)。 一个 函数化组件 就像这样: Vue.component('my-component', { functional: true, // 为了弥补缺少的...

    Vue组件之高德地图地址选择功能的实例代码

    注:本文基于上一篇文章【Vue-Cli 3.0 中配置高德地图 】 ,采用直接引入高德 SDK 的方式来使用高德地图api 一、效果图 二、组件要实现的功能 1. 如果有传入坐标点,则定位到坐标点 2. 如果没有传入坐标点,则定位...

    JS 组件系列之BootstrapTable的treegrid功能

    上篇给大家介绍了JS 组件系列之 bootstrap treegrid 组件封装过程,下面重点给大家介绍JS 组件系列之BootstrapTable的treegrid功能,需要的的朋友一起学习吧! 一、效果预览 全部折叠 展开一级 全部展开 二、代码...

    Java.Web整合开发王者归来.part12.rar

    非常好的书,从51CTO上花钱下载的,全部下完14个压缩文件后再解压  《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》全面介绍了Java Web开发中的各种相关技术及知识。全书分为9篇,内容层次...

    Vue学习笔记进阶篇之多元素及多组件过渡

    本文介绍了vue 多元素及多...即使在技术上没有必要,给在 &lt;transition&gt; 组件中的多个元素设置 key 是一个更好的实践。 示例: &lt;button v-if="isEditing" key="save"&gt; Save &lt;/button&gt; &lt;button v-

    Vue.js 父子组件通信的十种方式

    最近一直在做 Vue项目代码层面上的优化,说实话,优化别人的代码真是件痛苦的事情,功能实现尚且不说,就说代码规范我就能再写出一篇文章来。真的是无规范不成方圆,规范这个东西太重要了!有点扯了,回到主题,咳咳...

    Hadoop各组件详解(Hbase篇 持续更新版)

    1)HBASE译为“Hadoop Database”,是一个高可靠性、高性能、列存储、可伸缩、实时读写的NoSQL数据库系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群 2)主要用来存储结构化和半结构化的松散数据...

    vue2.0开发实践总结之疑难篇

    续上一篇文章:vue2.0 开发实践总结之入门篇 ,如果没有看过的可以移步看一下。  本篇文章目录如下: 1. vue 组件的说明和使用 2. vuex在实际开发中的使用 3. 开发实践总结  1. vue 组件的说明和使用 一个组件...

    又一款MVVM组件 构建自己的Vue组件(2)

    前言:转眼距离上篇JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少。经过这几个月的时间,Vue的发展也是异常迅猛,...

    SpringCloudLearning_forezp.tar.gz

    史上最简单的SpringCloud教程 | 第十五篇: Spring Cloud Gateway 之Predict篇 史上最简单的SpringCloud教程 | 第十六篇: Spring Cloud Gateway 之filter篇 史上最简单的SpringCloud教程 | 第十七篇: Spring Cloud ...

    你品,你细品web的三大组件

    Javaweb的三大组件之Filter一.概念二.作用三.快速入门1.步骤2.代码3.过滤器配置3.1web.xml配置3.2过滤器执行流程3.3过滤器生命周期3.4过滤器配置详情3.4.1拦截路径配置3.4.2拦截方式配置3.5过滤器链四.案例case one ...

Global site tag (gtag.js) - Google Analytics