导入commons-fileupload-1.2.1.jar
commons-io-1.4.jar
1.页面Form必需要加 ENCTYPE="multipart/form-data" method="post"
2.上传处理步骤
// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
DiskFileItemFactory dfif = new DiskFileItemFactory();
// 设置上传文件时用于临时存放文件的内存大小,这里是10K.多于的部分将临时存在硬盘
dfif.setSizeThreshold(1024 * 10);
// 设置存放临时文件的目录,web根目录下的FileUploadTemp目录
dfif.setRepository(new File(this.getServletContext().getRealPath("") + "\\FileUploadTemp"));
// 用以上工厂实例化上传组件
ServletFileUpload sfu = new ServletFileUpload(dfif);
//设置文件名编码
sfu.setHeaderEncoding("UTF-8");
// 设置最大上传尺寸
sfu.setFileSizeMax(MAX_SIZE);
// 从request得到 所有 上传域的列表
List fileList = null;
try {
fileList = sfu.parseRequest(request);
} catch (FileUploadException e) {// 处理文件尺寸过大异常
if (e instanceof FileSizeLimitExceededException) {
//文件尺寸超过规定大小
return;
}
e.printStackTrace();
}
// 忽略简单form字段而不是上传域的文件域( 等)
if (fileItem == null || fileItem.isFormField()) {
continue;
}
// 得到文件的完整路径
path = fileItem.getName();
// 得到文件的大小
size = fileItem.getSize();
// 拒绝接受规定文件格式之外的文件类型
if(allowedExt.indexOf(t_ext) < 0){//t_ext为文件后缀名,从文件完整路径中获得,allowedExt为自定义的可上传文件后缀名列表,个人距地更具后缀名俩判断类型不好
//文件格式不正确
return;
}
// 保存文件
fileItem.write(new File(u_name));//u_name为文件名
3.中文情况,如果没有指定编码,问文件名会用系统的默认编码解析,可能会乱码,建议指定编码
// 用以上工厂实例化上传组件
ServletFileUpload sfu = new ServletFileUpload(dfif);
//设置文件名编码
sfu.setHeaderEncoding("UTF-8");