preparation
本节摘要:本节主要介绍上传文件到指定目录。
引入:
文件上传是开发中常用的功能,本节主要介绍用commons-fileupload-1.1.jar包实现基本的文件上传功能,即上传文件到指定的目录中,同时介绍上传过程中使用到的相关类及其方法。
下载插件:
准备需要的jar包
* commons-fileupload-1.1.jar 文件上传jar包(必须导入)
* commons-io-1.2.jar (必须导入)如果不导入的程序编译时不会报错,但是发布后运行时会报错
* log4j-1.2.8.jar 强烈建议导入,但在本类中不是必须的,后面的上传文件到数据库中的类中会使用
* classes12.jar 连接oracle数据库的jar包,后面的上传文件到数据库中时必须导入
开发环境:
System:xp JDK:1.5(开发的JDK版本) Tomcat:5.X Myeclipse:6.5
注意:编译的JDK版本用JDK1.4(如果用JDK1.5编译,会报”Unsupported major.minor version 49.0”错误)
项目环境:
文件上传目录介绍:
在D盘根目录新建一个test文件夹,然后在test文件夹中新建以下两个文件夹
* temp:存放超过设置大小的文件(>2M的文件)
* uploadfile:上传文件的存放目录(<=2M的文件)
class&method:
*DiskFileItemFactory
* 实现了FileItemFactory接口
* 主要方法有:
* public FileItem createItem(String fieldName, String contentType, boolean isFormField, String fileName)
* setRepository(File repository);设置缓存路径 也有相应的get方法
* setSizeThreshold(int sizeThreshold);设置上传文件内存缓冲区的大小 也有相应的get方法
*
* ServletFileUpload
* 从FileUpload继承,而FileUpload又从FileUploadBase继承
* ServletFileUpload(FileItemFactory fileItemFactory);传入一个fileItemFactory对象,构造ServletFileUpload对象
* List parseRequest(HttpServletRequest request);从request中获得文件请求列表
* void setSizeMax(long sizeMax);//设置允许上传文件大小 也有相应的get方法
* setHeaderEncoding(String encoding);//设置上传文件名编码的格式 也有相应的get方法
*
* Pattern
* 正则表达式的编译表示形式,指定为字符串的正则表达式必须首先被编译为此类的实例。
* 然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配
* static Pattern compile(String regex);将给定的正则表达式编译到模式中
* Matcher matcher(CharSequence input);创建匹配给定输入与此模式的匹配器,返回此模式的新匹配器
*
* FileItem
* 抽象接口,继承Serializable
* boolean isFormField();判断FileItem类对象封装的数据是否属于一个普通表单字段,
* 还是属于一个文件表单字段,如果是普通表单字段则返回true,否则返回false
* String getName();用于获得文件上传字段中的文件名
* String getFieldName();用于返回表单字段元素的name属性值
* long getSize();获得上传文件的大小 单位:字节
* getContentType();用于获得上传文件的类型
* void write(File paramFile);用于将FileItem对象中保存的主体内容保存到某个指定的文件中
*
* Matcher
* 通过解释 Pattern 对 character sequence 执行匹配操作的引擎。
* 通过调用模式的 matcher 方法从模式创建匹配器。创建匹配器后,可以使用它执行三种不同的匹配操作:
* matches方法尝试将整个输入序列与该模式匹配。
* lookingAt 尝试将输入序列从头开始与该模式匹配。
* find 方法扫描输入序列以查找与该模式匹配的下一个子序列。
* String group(int group)返回在以前匹配操作期间由给定组捕获的输入子序列
*
* String
* boolean endsWith(String suffix)测试此字符串是否以指定的后缀结束。
start
1.新建web项目UpDown,导入上面介绍的4个jar包
2.新建upload.html文件,用于上传的前台的UI界面
3.新建servlet文件Upload.java文件,用于对上传的文件进行处理
4.配置web.xml文件
5.发布项目
result
访问的URL如下:
http://localhost:8080/UpDown/upload.html
upload.html页面如下:
上传完成后跳转显示的页面如下:
检查指定的上传目录:
检查文件大小限制(上传一个大于2M的文件,然后点击”开始上传”,界面显示如下):
检查文件后缀名过滤(上传一个exe文件,然后点击”开始上传”,界面显示如下):
遗留&拓展部分:
* 1.中文乱码问题 IE界面显示乱码、上传目录乱码
* 2.上传目录和程序不在同一台主机上的处理方式
* 2.文件缓存问题
* 3.文件的端点续传功能
* 4.上传滚动条问题
answer
1.关于中文乱码问题的解决方法
经过测试以下语句设置为utf-8即可解决,设置为gbk或gb2312都无法解决中文乱码问题
sevletFileUpload.setHeaderEncoding("utf-8");