- 浏览: 183365 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
qingfengde:
这么傻逼的判断方法,不知道你博主怎么想的,改后缀就有问题了
poi读取Excel(兼容2003和2007) -
stylrmomo:
Thanks
oracle查看创建表的sql语句 -
tianshi1017:
判断03和07的excel版本这里貌似就不用了吧
这样一个是不 ...
poi读取Excel(兼容2003和2007) -
mymobile:
Technoboy 写道Tomcat默认用ISO-8859-1 ...
让Tomcat支持中文路径和中文文件名 -
Technoboy:
Tomcat默认用ISO-8859-1进行解码,配置URIEn ...
让Tomcat支持中文路径和中文文件名
Apache Commons fileUpload实现文件上传
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处
、作者信息和本声明。否则将追究法律责任。http://zhangjunhd.blog.51cto.com/113473/18331
Apache
的
commons-fileupload.jar
可方便的实现文件的上传功能,本文通过实例来介绍如何使用
commons-fileupload.jar
。
@author:ZJ 07-2-22
将
Apache
的
commons-fileupload.jar
放在应用程序的
WEB-INF\lib
下
,
即可使用。下面举例介绍如何使用它的文件上传功能。
所使用的
fileUpload
版本为
1.2
,环境为
Eclipse3.3+MyEclipse6.0
。
FileUpload
是基于
Commons IO
的,所以在进入项目前先确定
Commons IO
的
jar
包(本文使用
commons-io-1.3.2.jar
)在
WEB-INF\lib
下。
此文作示例工程可在文章最后的附件中下载。
示例
1
最简单的例子,通过
ServletFileUpload
静态类来解析
Request
,工厂类
FileItemFactory
会对
mulipart
类的表单中的所有字段进行处理,不只是
file
字段。
getName
()得到文件名,
getString
()得到表单数据内容,
isFormField
()可判断是否为普通的表单项。
demo1.html
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=GB18030"
>
<
title
>
File upload
</
title
>
</
head
>
<
body
>
//
必须是
multipart
的表单数据。
<
form
name
=
"myform"
action
=
"demo1.jsp"
method
=
"post"
enctype
=
"multipart/form-data"
>
Your name:
<
br
>
<
input
type
=
"text"
name
=
"name"
size
=
"15"
><
br
>
File:
<
br
>
<
input
type
=
"file"
name
=
"myfile"
><
br
>
<
br
>
<
input
type
=
"submit"
name
=
"submit"
value
=
"Commit"
>
</
form
>
</
body
>
</
html
>
|
demo1.jsp
<%@
page
language
=
"java"
contentType
=
"text/html; charset=GB18030"
pageEncoding
=
"GB18030"
%>
<%@
page
import
=
"org.apache.commons.fileupload.*"
%>
<%@
page
import
=
"org.apache.commons.fileupload.servlet.*"
%>
<%@
page
import
=
"org.apache.commons.fileupload.disk.*"
%>
<%@
page
import
=
"java.util.*"
%>
<!
DOCTYPE
HTML
PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
>
<%
boolean
isMultipart = ServletFileUpload.isMultipartContent(request);
//
检查输入请求是否为
multipart
表单数据。
if
(isMultipart ==
true
) {
FileItemFactory factory =
new
DiskFileItemFactory();
//
为该请求创建一个
DiskFileItemFactory
对象
,
通过它来解析请求。执行解析后,所有的表单项目都保存在一个
List
中。
ServletFileUpload upload =
new
ServletFileUpload(factory);
List<FileItem> items =
upload.parseRequest(request);
Iterator<FileItem> itr =
items.iterator();
while
(itr.hasNext()) {
FileItem item = (FileItem)
itr.next();
//
检查当前项目是普通表单项目还是上传文件。
if
(item.isFormField()) {
//
如果是普通表单项目,显示表单内容。
String fieldName = item.getFieldName();
if
(fieldName.equals(
"name"
))
//
对应
demo1.html
中
type="text"
name="name"
out.print(
"the field name is"
+
item.getString());
//
显示表单内容。
out.print(
"<br>"
);
}
else
{
//
如果是上传文件,显示文件名。
out.print(
"the upload file name is"
+ item.getName());
out.print(
"<br>"
);
}
}
}
else
{
out.print(
"the enctype must be multipart/form-data"
);
}
%>
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=GB18030"
>
<
title
>
File upload
</
title
>
</
head
>
<
body
>
</
body
>
</
html
>
|
结果:
the field name isjeff
the upload file name isD:\C 语言考试样题 \ 作业题 .rar |
示例
2
上传两个文件到指定的目录。
demo2.html
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=GB18030"
>
<
title
>
File upload
</
title
>
</
head
>
<
body
>
<
form
name
=
"myform"
action
=
"demo2.jsp"
method
=
"post"
enctype
=
"multipart/form-data"
>
File1:
<
br
>
<
input
type
=
"file"
name
=
"myfile"
><
br
>
File2:
<
br
>
<
input
type
=
"file"
name
=
"myfile"
><
br
>
<
br
>
<
input
type
=
"submit"
name
=
"submit"
value
=
"Commit"
>
</
form
>
</
body
>
</
html
>
|
demo2.jsp
<%@
page
language
=
"java"
contentType
=
"text/html; charset=GB18030"
pageEncoding
=
"GB18030"
%>
<%@
page
import
=
"org.apache.commons.fileupload.*"
%>
<%@
page
import
=
"org.apache.commons.fileupload.servlet.*"
%>
<%@
page
import
=
"org.apache.commons.fileupload.disk.*"
%>
<%@
page
import
=
"java.util.*"
%>
<%@
page
import
=
"java.io.*"
%>
<!
DOCTYPE
HTML
PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
>
<%
String uploadPath=
"D:\\temp"
;
boolean
isMultipart = ServletFileUpload.isMultipartContent(request);
if
(isMultipart==
true
){
try
{
FileItemFactory factory =
new
DiskFileItemFactory();
ServletFileUpload upload =
new
ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
//
得到所有的文件
Iterator<FileItem> itr = items.iterator();
while
(itr.hasNext()){
//
依次处理每个文件
FileItem item=(FileItem)itr.next();
String fileName=item.getName();
//
获得文件名,包括路径
if
(fileName!=
null
){
File fullFile=
new
File(item.getName());
File savedFile=
new
File(uploadPath,fullFile.getName());
item.write(savedFile);
}
}
out.print(
"upload succeed"
);
}
catch
(Exception e){
e.printStackTrace();
}
}
else
{
out.println(
"the
enctype must be multipart/form-data"
);
}
%>
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=GB18030"
>
<
title
>
File upload
</
title
>
</
head
>
<
body
>
</
body
>
</
html
>
|
结果:
upload succeed
|
此时,在
"D:\temp"
下可以看到你上传的两个文件。
示例
3
上传一个文件到指定的目录,并限定文件大小。
demo3.html
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=GB18030"
>
<
title
>
File upload
</
title
>
</
head
>
<
body
>
<
form
name
=
"myform"
action
=
"demo3.jsp"
method
=
"post"
enctype
=
"multipart/form-data"
>
File:
<
br
>
<
input
type
=
"file"
name
=
"myfile"
><
br
>
<
br
>
<
input
type
=
"submit"
name
=
"submit"
value
=
"Commit"
>
</
form
>
</
body
>
</
html
>
|
demo3.jsp
<%@
page
language
=
"java"
contentType
=
"text/html; charset=GB18030"
pageEncoding
=
"GB18030"
%>
<%@
page
import
=
"org.apache.commons.fileupload.*"
%>
<%@
page
import
=
"org.apache.commons.fileupload.servlet.*"
%>
<%@
page
import
=
"org.apache.commons.fileupload.disk.*"
%>
<%@
page
import
=
"java.util.*"
%>
<%@
page
import
=
"java.io.*"
%>
<!
DOCTYPE
HTML
PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
>
<%
File uploadPath =
new
File(
"D:\\temp"
);
//
上传文件目录
if
(!uploadPath.exists()) {
uploadPath.mkdirs();
}
//
临时文件目录
File tempPathFile =
new
File(
"d:\\temp\\buffer\\"
);
if
(!tempPathFile.exists()) {
tempPathFile.mkdirs();
}
try
{
// Create a factory for disk-based file items
DiskFileItemFactory factory =
new
DiskFileItemFactory();
// Set factory constraints
factory.setSizeThreshold(4096);
//
设置缓冲区大小,这里是
4kb
factory.setRepository(tempPathFile);
//
设置缓冲区目录
// Create a new file upload handler
ServletFileUpload upload =
new
ServletFileUpload(factory);
// Set overall request size constraint
upload.setSizeMax(4194304);
//
设置最大文件尺寸,这里是
4MB
List<FileItem> items = upload.parseRequest(request);
//
得到所有的文件
Iterator<FileItem> i =
items.iterator();
while
(i.hasNext()) {
FileItem fi = (FileItem) i.next();
String fileName = fi.getName();
if
(fileName !=
null
) {
File fullFile =
new
File(fi.getName());
File savedFile =
new
File(uploadPath,
fullFile
.getName());
fi.write(savedFile);
}
}
out.print(
"upload succeed"
);
}
catch
(Exception e) {
e.printStackTrace();
}
%>
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=GB18030"
>
<
title
>
File upload
</
title
>
</
head
>
<
body
>
</
body
>
</
html
>
|
示例
4
利用
Servlet
来实现文件上传。
Upload.java
package
com.zj.sample;
import
java.io.File;
import
java.io.IOException;
import
java.util.Iterator;
import
java.util.List;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
org.apache.commons.fileupload.FileItem;
import
org.apache.commons.fileupload.disk.DiskFileItemFactory;
import
org.apache.commons.fileupload.servlet.ServletFileUpload;
@SuppressWarnings
(
"serial"
)
public
class
Upload
extends
HttpServlet {
private
String
uploadPath
=
"D:\\temp"
;
//
上传文件的目录
private
String
tempPath
=
"d:\\temp\\buffer\\"
;
//
临时文件目录
File
tempPathFile
;
@SuppressWarnings
(
"unchecked"
)
public
void
doPost(HttpServletRequest
request, HttpServletResponse response)
throws
IOException,
ServletException {
try
{
// Create a factory for disk-based file items
DiskFileItemFactory factory =
new
DiskFileItemFactory();
// Set factory constraints
factory.setSizeThreshold(4096);
//
设置缓冲区大小,这里是
4kb
factory.setRepository(
tempPathFile
);
//
设置缓冲区目录
// Create a new file upload handler
ServletFileUpload upload =
new
ServletFileUpload(factory);
// Set overall request size constraint
upload.setSizeMax(4194304);
//
设置最大文件尺寸,这里是
4MB
List<FileItem> items =
upload.parseRequest(request);
//
得到所有的文件
Iterator<FileItem> i =
items.iterator();
while
(i.hasNext()) {
FileItem fi = (FileItem)
i.next();
String fileName = fi.getName();
if
(fileName !=
null
) {
File fullFile =
new
File(fi.getName());
File savedFile =
new
File(
uploadPath
,
fullFile.getName());
fi.write(savedFile);
}
}
System.
out
.print(
"upload succeed"
);
}
catch
(Exception e) {
//
可以跳转出错页面
e.printStackTrace();
}
}
public
void
init()
throws
ServletException {
File uploadFile =
new
File(
uploadPath
);
if
(!uploadFile.exists()) {
uploadFile.mkdirs();
}
File tempPathFile =
new
File(
tempPath
);
if
(!tempPathFile.exists()) {
tempPathFile.mkdirs();
}
}
}
|
demo4.html
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=GB18030"
>
<
title
>
File upload
</
title
>
</
head
>
<
body
>
//
action="fileupload"
对应
web.xml
中
<servlet-mapping>
中
<url-pattern>
的设置
.
<
form
name
=
"myform"
action
=
"fileupload"
method
=
"post"
enctype
=
"multipart/form-data"
>
File:
<
br
>
<
input
type
=
"file"
name
=
"myfile"
><
br
>
<
br
>
<
input
type
=
"submit"
name
=
"submit"
value
=
"Commit"
>
</
form
>
</
body
>
</
html
>
|
web.xml
<
servlet
>
<
servlet-name
>
Upload
</
servlet-name
>
<
servlet-class
>
com.zj.sample.Upload
</
servlet-class
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>
Upload
</
servlet-name
>
<
url-pattern
>
/fileupload
</
url-pattern
>
</
servlet-mapping
>
|
本文出自 “子 孑 ” 博客,请务必保留此出处http://zhangjunhd.blog.51cto.com/113473/18331
发表评论
-
精通jar命令
2014-06-28 22:35 2017Jar的定义 首先套用百度百科对Jar的解释:Ja ... -
commons DBCP 配置说明 (转贴)
2011-09-16 04:28 2001... -
Apache Commons BeanUtils包学习
2011-09-15 10:21 2010一、简介: BeanUtils 提供对 Java ... -
Apache上全部JAVA开源项目简介(转载)
2011-09-13 17:25 2006Apache 上全部JAVA开源 ... -
Commons-lang学习笔记
2011-09-13 15:19 1377Commons-lang记录: 一个 ... -
poi读取Excel(兼容2003和2007)
2011-09-11 11:37 5776前段时间做项目时,碰到了要导入Excel文件中的数据的需求,网 ...
相关推荐
### Commons-FileUpload 实现文件上传下载 #### 知识点概述 Commons-FileUpload 是 Apache 提供的一个用于处理 HTTP 文件上传的组件。它基于 Servlet 规范,并且能够解析来自 `multipart/form-data` 编码类型的 ...
Struts1.2和Commons-Fileupload是Java Web开发中用于实现文件上传的两个重要组件。Struts1.2是Apache的一个开源框架,主要用于构建MVC(模型-视图-控制器)架构的Web应用程序,而Commons-Fileupload则是Apache ...
Apache Commons FileUpload是一个Java库,专门用于处理HTTP协议中的多部分文件上传请求。在Web应用程序中,它允许用户上传文件到服务器,这对于处理用户提交的图片、文档或其他类型的数据至关重要。 描述中提及的...
总的来说,`commons-fileupload-1.3.3.jar`和`commons-io-2.6.jar`是Java开发中不可或缺的工具,它们大大简化了文件上传的实现,同时也提供了良好的错误处理和资源管理机制,使得文件上传操作变得更加可靠和高效。...
本篇将详细讲解如何使用Commons FileUpload来实现文件上传的功能。 首先,理解HTTP协议中的多部分数据是至关重要的。在HTML表单提交文件时,通常会使用`enctype="multipart/form-data"`属性,此时,数据会被分割成...
`commons-fileupload-1.3.3.jar` 和 `commons-io-2.5.jar` 是Apache Commons项目中的两个重要库,它们提供了强大的文件上传功能,使得开发者可以轻松地处理用户通过表单提交的文件。 Apache Commons FileUpload是...
总的来说,Apache Commons FileUpload和Commons IO是Java Web开发中的重要工具,它们极大地简化了文件上传和文件操作的复杂性,让开发者能够更专注于业务逻辑,而不是底层的实现细节。通过理解这两个库的工作原理和...
本教程将详细介绍如何利用commons-fileupload库来实现在Java Web应用中的文件上传和下载,并确保在整个过程中不会出现中文乱码问题。 1. **Apache Commons FileUpload简介** Apache Commons FileUpload是一个开源...
在`描述`中提到的`commons-fileupload-1.2.2.jar`和`commons-io.jar`是实现文件上传功能所必需的依赖库。`commons-fileupload-1.2.2.jar`是核心库,包含了文件上传的处理逻辑;`commons-io.jar`则是Apache Commons ...
commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar jar 文件。 commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 案例上传: http://hi.baidu.com/lichao77821/blog commons-fileupload-1.2.1.jar和commons-...
通过阅读这篇博客,开发者可以更好地理解如何在Java Web应用中使用`commons-fileupload`组件实现安全、高效的文件上传功能。 总结起来,`commons-fileupload`组件是处理HTTP文件上传的利器,它简化了文件上传的流程...
Commons FileUpload和Commons IO是Java开发中两个非常重要的库,尤其在处理文件上传功能时。这两个库由Apache软件基金会维护,是许多Java Web应用程序的标准组成部分。 `commons-fileupload-1.3.2.jar`是Apache ...
2. **添加依赖**:下载`commons-fileupload`的JAR包,例如`commons-fileupload-1.0-beta-1.jar`,并将它放入Tomcat的`lib`目录下,通常是`${TOMCAT}/common/lib`。此外,由于`commons-fileupload`依赖于`commons-...
在实际开发中,当你需要在Web应用中实现文件上传功能时,首先会配置`commons-fileupload-1.2.1.jar`来解析请求,然后利用`commons-io-1.4.jar`处理上传后的文件,比如保存到服务器的指定目录,或者进行一些预处理...
Apache Commons FileUpload和Commons IO两个库是Java中处理文件上传的关键组件,它们为SpringMVC和MyBatis这样的框架提供了强大的支持。本篇文章将深入探讨这两个库以及它们在图片处理中的作用。 首先,`commons-...
总的来说,`commons-fileupload-1.3.1.jar` 和 `commons-io-2.4.jar` 在Java Web开发中是处理文件上传不可或缺的工具,它们为开发者提供了强大的支持,使得文件上传功能的实现变得既高效又安全。在开发过程中,正确...
在处理文件上传时,`commons-fileupload`可能会依赖`commons-io`来完成一些底层的文件操作,比如读写文件、复制文件、检查文件是否存在等。`1.3.2`同样表示这个库的一个特定版本,它可能包含了更多的功能和改进。 ...
在实际开发中,使用`Commons FileUpload`和`Commons IO`库,开发者可以方便地处理复杂的文件上传逻辑,比如限制文件类型、大小,或者进行上传后的文件处理。 这两个库在Java Web应用、尤其是Servlet和JSP开发中非常...
在Java Web开发中,文件上传是一项常见的功能,Apache Commons FileUpload库是实现这一功能的强大工具。本示例将深入解析如何结合Maven构建一个基于Servlet的文件上传演示项目。Maven是一个项目管理工具,它可以帮助...
Commons FileUpload是Apache软件基金会的一...在实际开发中,结合`commons-fileupload`和`commons-io`这两个库,可以方便地实现在Java Web应用中的文件上传功能,并且可以自定义各种策略以满足特定的安全性和性能要求。