fileupload

FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下面的文件上传功能,与常见的SmartUpload齐名。

组件

1、FileUpLoad组件介绍

为方便用户处理文件上传数据,Apache 开源组织提供了一个用来处理表单文件上传的一个开源组件( Commons-fileupload ),该组件性能优异,并且其API使用极其简单,可以让开发人员轻松实现web文件上传功能,因此在web开发中实现文件上传功能,通常使用Commons-fileupload组件实现。

2、该组件相应的支撑jar包:

Commons-fileupload和commons-io

commons-io 不属于文件上传组件的开发jar文件,但Commons-fileupload 组件从1.1 版本开始,它工作时需要commons-io包的支持。

3、fileupload组件工作流程

工作原理

上传的文件要求包括一个根据RFC 1867(在HTML中基于表单的文件)编码的选项列表清单。组件FileUpload可以解析这个请求,并给你的应用程序提供一份独立上传的项目清单。无论每个项目背后如何执行都实现了FileItem接口。

每一个文件项目都有一些属性,这些可能在你的应用程序中应用到。比如:每一个项目有一个名称name和内容类型content type,并提供了一个 InputStream访问其数据。另一方面,你处理项目的方法可能有所不同,这个依赖于是否这个项目是一个规则的表单域,即:这个数据是来自普通的表单文本,还是普通的HTML域或是一个上传文件。在FileItem接口中提供了处理这些问题的方法,可以更加方便的去访问这些数据。
组件FileUpload使用FileItemFactory工厂创建新的文件项目。这个给了组件FileUpload很大的灵活性。这个工厂拥有怎样创建项目的最终控制权。工厂执行过程中上传项目文件的临时数据可以存储在内存中或硬盘上。这个依赖于上传项目的大小(即:数据的字节)。不过这种行为可以在你的应用程序中适当的自定制。

解析

在实现上传项目之前,当然需要解析这个请求。确保这个请求的确是一个正确的上传文件,组件FileUpload为了使这个判断简单,提供了一个静态的方法去做这个事情。
// 检测我们是否一个文件上传的请求
boolean isMultipart = ServletFileUpload.isMultipartContent(request);

实例

最简单的使用情况如下:
* 上传项目只要足够小,就应该将其保存在内存中。
* 较大的项目应该被写入到硬盘的临时文件中。
* 应该避免有非常大的上传项目。
* 设置项目默认的在内存中所占的空间,限制最大的上传请求,并设定临时文件 的位置。
处理这种情况下的请求非常的简单:
// 创建磁盘工厂
FileItemFactory factory = new DiskFileItemFactory();
// 创建处理工具
ServletFileUpload upload = new ServletFileUpload(factory);
// 解析
List <FileItem> items = upload.parseRequest(request);
这就是我们真正需要的全部代码。
处理的结果是生成了一个文件项目列表,每个文件项目实现一个FileItem接口。下面将介绍如何处理这些项目。

控制

如果你的使用情况和上面描述的例子很接近,但是你需要在一点更多的控制限定文件的大小或临时文件的存放位置。你可以很容易的自定义上传实例或文件项目或两者的行为。下面例子展示了几种配置选项:
// 创建磁盘工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置参数
factory.setSizeThreshold(yourMaxMemorySize);
factory.setRepository(yourTempDirectory);
// 创建处理工具
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置最大允许的尺寸
upload.setSizeMax(yourMaxRequestSize);
// 解析
List <FileItem> items = upload.parseRequest(request);
当然,每一个配置处理方法都是独立于其他方法的,但是如果你想一次性配置这个工厂,你可以使用工厂的另一个重载方法。像这样:
DiskFileItemFactory factory = new DiskFileItemFactory( yourMaxMemorySize, yourTempDirectory);
如果你还需要更多的控制请求的解析,比如存储项目到其它地方(如:数据库),你将需要看看FileUpload自定义(注:不知道为什么这里链接过去的页面什么也没有)。
引用:
https://blog.csdn.net/qq_35448976/article/details/77185911
https://baike.baidu.com/item/fileupload/6035010?fr=aladdin
 
 

Java Fileupload的更多相关文章

  1. Apache Commons 简述

    Apache Commons 是一个关注于可复用的 Java 组件的 Apache 项目.Apache Commons 由三部分构成: Commons Proper - 一个可复用的 Java 组件库 ...

  2. [转]awsome-java

    原文链接 Awesome Java A curated list of awesome Java frameworks, libraries and software. Contents Projec ...

  3. Apache commons——Apache旗下的通用工具包项目

    Apache Commons是Apache旗下的一个开源项目,包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 这里是Apache commons的官方网站 下面是工具的简单介绍: ...

  4. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  5. java上传组件FileUpload

    如果表单中有文件要上传,也就是有<input type="file" name="name"/> 就需要在form标签中添加enctype=&quo ...

  6. java采用Apache FileUpload组件实现上传

    可见:FileItemSteam(servletFileUpload.getItemIterator(httpServletRequest))速度要快于FileItem(servletFileUplo ...

  7. java 上传1(使用java组件fileupload)

    使用fileupload要添加以下包

  8. Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.RequestContext

    1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...

  9. 上传文件代码报错,java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory

    2018-09-11 11:11:08.235 ERROR 14352 --- [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : ...

随机推荐

  1. selenium模块

    一 介绍 二 安装 三 基本使用 四 选择器 五 等待元素被夹在 元素交互操作 其他 项目联 一 介绍 selenium最初是一个自动化测试的工具,而爬虫中使用它主要是为了解决requests无法直接 ...

  2. Spring框架中的org.springframework.context.annotation.Import注解类

    @Import注解的作用和在使用spring的xml配置时用到的<import/>类似.但应注意是@Import在使用时必须要保证能被IOC容器扫描到,所以通常它会和@Configurat ...

  3. babel-polyfill的几种使用方式

    前言 preset与plugin的关系: preset中已经包含了一组用来转换ES6+的语法的插件,如果只使用少数新特性而非大多数新特性,可以不使用preset而只使用对应的转换插件 babel默认只 ...

  4. [insight] debug

    python: 1. print理解流程 print('xy1') print('xy2') 可以更好地跟踪函数的执行流程,分析代码 2. 用python库 import pdb; pdb.set_t ...

  5. jmeter知识总结(一)

    Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工 ...

  6. 记录一个pom文件

    rt <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m ...

  7. MUI底部导航切换子页面

    1.登陆页面进入之后,进入到main页面,main页面只有一个底部导航,然后引入子页面进行渲染. <nav class="mui-bar mui-bar-tab" id=&q ...

  8. LoadRunner学习笔记(三)

    一.  LR如何监控Windows系统资源 一般通过LR进行压力测试,都需要实时监控服务端的系统资源,我们可以直接在远程连接服务器上面开启任务管理器 或者在控制面板中找到性能计数器来监控,但是为了在L ...

  9. Lesson 3-1(语句:条件语句)

    3.1 条件语句:if 语句 3.1.1 if 语句组成 --- if 语句包含:if 关键字.条件.冒号.if 子句(缩进代码块). --- if 语句表达的意思为:如果条件为真(True),执行后 ...

  10. SpringBoot整合Swagger测试api构建

    @Author:SimpleWu 什么是Swagger? Swagger是什么:THE WORLD'S MOST POPULAR API TOOLING 根据官网的介绍: Swagger Inspec ...