献给建军八十周年
文件上传在JAVA应用中比较常用,现在也有许多成熟免费的第三方工具如:Commons FileUpload,瀟湘xiaoxiang.fileUpload,O'Reilly cos,smartUpload。个人使用过后感觉前两者效果比较理想,后两者由于种种原因已经停止新版本的开发了。
common-fileupload组件是apache的一个开源项目之一,可以从http://commons.apache.org/fileupload/下载最新版本FileUpload 1.2。该组件简单易用,可实现一次上传一个或多个文件,并可限制文件大小。不足:还欠缺一些相关功能,有待于进一步完善。这个包需要Commons IO的支持,可以在http://commons.apache.org/io/下载最新版本:1.3.2 。在此主要介绍几个关键步骤:
1.创建一个文件工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
2.设置缓冲区大小,10kb
factory.setSizeThreshold(1024 * 10);
3.设置临时目录:
factory.setRepository(new File(tempPath));
4.创建文件上传对象
ServletFileUpload upload = new ServletFileUpload(factory);
5.设置单个上传文件的最大值,10M
upload.setFileSizeMax(1024 * 1024 * 10);
6.设置所有文件的最大值,100M
upload.setSizeMax(1024 * 1024 * 100);
7.得到所有上传对象
List items = upload.parseRequest(request);
8.迭代取出所有数据写入文件
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// 区分数据是否为简单的表单数据
if (item.isFormField()) {
// 可以获得简单的表单数据,即除属性为file以外的表单项.以下为表单项的name 和 value
item.getFieldName() + item.getString();
} else {
// 提交的文件,可以得到一些属性
String fieldName = item.getFieldName();
// 得到上传文件的大小
long sizeInBytes = item.getSize();
// 得到上传文件的全路径和文件名 例:D:\download\Hibernate.rar
String name = item.getName();
//处理文件名后得到文件名后缀 \Hibernate.rar
String filename = name.substring(item.getName()
.lastIndexOf("\\"), name.length());
//拼接出新的文件名newPath + filename后创建一个文件对象
File f = new File(newPath + filename);
//创建文件
item.write(f);
}
}
xiaoxiang.fileUpload:可以从http://www.xiaoxiang.net/jspupload/main/index.asp 下载最新版2.1
1.支持中文。
2.一次上传多个文件。
3.允许得到上传的文件的原文件名,并可以将文件改名存入服务器。
4.允许设定每次上传文件的总大小,和单个文件的文件大小。
5.可以设定只被允许文件后缀名列表。
6.可以设定只被允许的文件类型列表。(注:从文件格式分析,比只分析后缀名更加准确.)
7.可以设定是否覆盖服务器上同名文件。
8.可以将所有文件上传到一个文件夹,也可以将文件分类存入不同文件夹。
官方有许多教程和例子所以不多做介绍,使用起来还是比较爽手的。
备注:这些第三方工具与现有项目的集成都是非常方便简单,只需将.jar文件放入工程的lib目录下即可。
cos上传组件:
http://www.servlets.com/cos/
附件:
1.FileUpload中文帮助
2.由于jspsmart网站已关闭所以相应的下载也就无法得到,所以在附件中我提供了支持中文的jar包和例子喜欢的朋友也可以学习一下和感受一下。