1、 文件上传写Fileupload代码时导包的是commons,而不是apach包
2、 创建一个工厂DiskFileItemFactory factory=new DiskFileItemFactory();
将请求消息尸体中的每一个项目封装成单独的DiskFileitem对象
3、 创建解析文件上传的核心对象
ServletFileUpload upload=new ServletFileUpload(factory);
4、 解析有客户端通过request上传的请求:
List<FileItem>items=upload.parseRequest(request);
5、遍历这个集合,判断是普通的表单上传还是文件上传
for (FileItem item : items) {
//item.isFormField(),是用来判断当前的FileItem是否是普通的表单
if (item.isFormField()) {
//普通表单
//获取文件名称
String name=item.getFieldName();
String value=item.getString();
}else {
//文件上传
String fileName=item.getName();
//使用UUID改写文件名,防止多少次上传会有重名的文件覆盖
fileName=UUIDUtils.getUUID()+fileName;
//获取文件上传数据,将数据保存到服务器硬盘
//获取当前项目真实路径
String realPath=getServletContext().getRealPath("/upload");
//目录打散
String dir = DirUtils.getDir(fileName);
//保证计算处理的文件路径真实存在,所以先手动创建多级目录
new File(realPath, dir);
//将数据写出
try {
//文件输出的位置
item.write(new File(realPath,fileName));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}