文件上传之 commons-fileupload(一)
一 、简单介绍
使用最为广泛的Java文件上传组件,Struts本身采用这个包来处理文件上传。其基本原理:
FileUpload组件将页面提交的所有元素(普通form表单域,如text和文件域file)都看作一样的FileItem,这样上传页面提交的
request请求也就是一个FileItem的有序组合,FileUpload组件可以解析该request,并返回一个一个的FileItem。而对
每一个FileItem,FileUpload组件可以判断出它是普通form表单域还是文件file域,从而根据不同的类型,采取不同的操作--如果是
表单域,就读出其值,如果是文件域,就保存文件到服务器硬盘上或者内存中。
二、介绍下 commons-FileUpload上传过程:
首先要引入的.jar文件:
commons-fileupload-1.2.1.jar
commons-io-1.2.jar(此两个文件可以到官网:http://commons.apache.org/
(里面还会有帮助文档API) 下载)
其次值得注意的是,凡是要上载文件的表单都必须设置enctype属性,且属性的值必须是multipart/form-data,同时请求方法必须是POST!!!!
1、检测request中是否包含有multipart内容(isMultipartContent(request)是它的一个静态方法)
ServletFileUpload.isMultipartContent(request)
2、如果有,生成DiskFileItemFactory工厂将进行相关的设置(不知道的情况下也可以不设置)
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(4096);// 设置缓冲区大小,这里是4kb// Location to save data that is larger than maxMemSize.
factory.setRepository(new
File("d:/"));// 设置临时目录factory.setHeaderEncoding("UTF-8");//设置字符集 防止中文文件名乱码
3、生成上传ServletFileUpload类,并将DiskFileFactory工厂传给它,并对ServletFileUpload进行配置
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(3*1024*1024);//设置上传文件大小3M
upload.setSizeMax(6*1024*1024);//设置请求总文件大小6M
4、从request得到上传的文件列表,并获得其迭代器
// Parse the request to get file items.
List<FileItem> fileItems =
upload.parseRequest(request);// Process the uploaded file items
Iterator i = fileItems.iterator();
5、处理文件:写入或者其他操作
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
if (fi.isFormField()) {//当是表单域时,进行的处理
// Get the uploaded file parameters
String fieldName = fi.getFieldName();//得到元素的name属性的值String fieldValue=fi.getString("utf-8");//得到元素的value的值
String fileName = fi.getName();//这里是表单域,所以得到的是null} else {//当是文件域时,将文件保存到硬盘中
String basePath = request.getRealPath("/upload");
String contentType =
fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes =
fi.getSize();String fieldName =
fi.getFieldName();//得到元素的name属String fileName = fi.getName();//取得上传的文件名
file = new File(basePath+"/"+filename);fi.write(file);
}out.println("Uploaded Filename: " + fileName +
"<br>");
}
}}
说明:
FileItem接口是对用户上传文件的封装
DiskFileItemFactory 实现了FileItemFactory接口,主要方法有public
FileItem createItem(String fieldName, String contentType, boolean
isFormField, String fileName)
ServletFileUpload从FileUpload继承,而FileUpload又从FileUploadBase继承,功能:分析传入的request对象、得到文件列表FileItemIterator……
文件上传之 commons-fileupload(一)的更多相关文章
- jsp简易文件上传(common.fileupload)
昨天开始重新架构我的V&View(维视),之前写文章使用的是一个kindediter的插件,挺好用的.最近不知道咋了,出现了些小问题.早在写V&View的时候就想用以下两种方法实现文章 ...
- 实现文件上传功能(FileUpload组件)
文件上传: 项目中经常用到文件上传. 自己实现文件上传,使用文件上传组件fileupload组件 1.指定表单类型为文件上传, enctype=”multipart/form-data” 2.提交方式 ...
- .Net 使用文件上传控件FileUpload上传图片
例1: 来源:http://long546324.iteye.com/blog/349946 Default.aspx文档: <%@ Page Language="C#" A ...
- MVC文件上传-使用jQuery.FileUpload和Backload组件实现文件上传
本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传.MVC文件上传相关兄弟篇: 处理文件上传的服务端组件Backload 用于处理文件上传的服务端组件 ...
- 转:在Struts 2中实现文件上传
(本文转自:http://www.blogjava.net/max/archive/2007/03/21/105124.html) 前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题 ...
- Spring MVC文件上传教程 commons-io/commons-uploadfile
Spring MVC文件上传教程 commons-io/commons-uploadfile 用到的依赖jar包: commons-fileupload 1.3.1 commons-io 2.4 基于 ...
- Apache Commons FileUpload 实现文件上传
Commons FileUpload简介 Apache Commons是一个专注于可重用Java组件开发的 Apache 项目.Apache Commons项目由三个部分组成: 1.Commons P ...
- 使用FileUpload实现Servlet的文件上传
简介 FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下的文件上传功能. FileUpload链接 FileUpload 是基于Apache的Commons ...
- FileUpload文件上传控件
1.FileUpload控件的主要功能是向指定目录上传文件.FileUpload控件不会自动上传控件,而需要设置相关的事件处理程序,然后在程序中实现文件上传. 2.FileUpload控件常见的属性 ...
- 文件上传组件FileUpload 以及邮箱搭建JavaMail
文件上传与下载 1.1 文件上传 案例: 注册表单/保存商品等相关模块! --à 注册选择头像 / 商品图片 (数据库:存储图片路径 / 图片保存到服务器中指定的目录) 文件上传,要点: 前台: 1 ...
随机推荐
- 【JSP EL】使用EL表达式比较 动态选中 select中的option
<option value="${k.key }" ${KPIThis.parent.parent.thisId == k.key ? "selected" ...
- Linux Shell编程与编辑器使用详解
<Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...
- HQL语句中数据类型转换,及hibernate中createQuery执行hql报错
一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...
- errno , perror,strerror
1. 简介 很多系统函数在错误返回时将错误原因记录在libc定义的全局变量errno中,每种错误原因对应一个错误码. errno在头文件errno.h中声明,是一个整型变量,所有错误码都是正整数. 然 ...
- [OpenCV]实验1.1:图像加载、显示
实验要求:利用图像库的功能,实现从文件加载图像,并在窗口中进行显示的功能:利用常见的图像文件格式(.jpg;.png;.bmp; .gif)进行测试 实验原理:图片读取到程序中是以Mat结构存储的,在 ...
- (转) java中try/catch性能和原理
stackoverflow上有一个讨论,参与的人还挺多: https://stackoverflow.com/questions/141560/should-try-catch-Go-inside-o ...
- JQuery的get、post和ajax方法的使用
在JQuery中可以使用get,post和ajax方法给服务器端传递数据 get方法的使用(customForGet.js文件): function verify(){ //1.获取文本框的数据 // ...
- 电子商务ICP经营许可证申请条件
电子商务ICP经营许可证申请条件:注册资金100万的纯内资公司:服务器在本地:域名备案以公司名义备案:申请条件:1.公司营业执照副本复印件需清晰有效,并已完成该年度年检事宜,特别注意营业执照的有效期要 ...
- qq邮箱、qq空间点击后以word方式打开解决办法
解决办法: Internet--工具--Internet选项--程序--设为默认值
- websphere中的会话超时设置 和 web应用中web.xml中session-timeout关系
Tomcat默认的会话的超时时间设置 设置Tomcat session有效期的三种方式有: 1.在tomcat/conf/web.xml中修改session-timeout的值,该设置是TOMCAT全 ...