//1.创建FileItemFactory对象
FileItemFactory factory = newDiskFileItemFactory();//2.创建ServletFileUpload兑现
ServletFileUpload upload = newServletFileUpload(factory);
upload.setHeaderEncoding("utf-8"); //jiejue 表单项乱码问题
upload.setFileSizeMax(16*1024*1024);//单个文件上传的大小
upload.setSizeMax(5*16*1024*1024); //所有文件上传的大小//3.通过ServletFileUpload对象实现上传操作,将客户端一个个表单项封装到一个个FileItem中
List itemList = null;try{
itemList=upload.parseRequest(request);
}catch(FileUploadException e) {
e.printStackTrace();
request.setAttribute("mess", "文件大小为16*1024*1024");
request.getRequestDispatcher("/add.jsp").forward(request, response);return;
}//4.遍历各个File Item(相当于各个表单项进行处理)
System.out.println(itemList.size());
String name= null;int age = 0;double score = 0;
String realName= null;
String photoName= null;
String photoType= null;for(int i=0;i
FileItem item =itemList.get(i);
String fieldName= item.getFieldName();//获取name属性//判断普通表单项还是文件表单项
if(item.isFormField()){//普通,获取从客户端传递过来的值
if("name".equals(fieldName)){
name= item.getString("utf-8");//汉字需要修改编码
}if("age".equals(fieldName)){
age=Integer.parseInt(item.getString());
}if("score".equals(fieldName)){
score=Double.parseDouble(item.getString());
}
}else{//文件表单项//客户端传的文件表单项是photo,如果是多个可以使用多个if
if("photo".equals(fieldName)){//只能上传指定格式的文件
photoType = item.getContentType();//值为:images/jpg
if(!"image/jpeg".equals(photoType)&&!"image/gif".equals(photoType)){
request.setAttribute("mess", "上传格式不正确");
request.getRequestDispatcher("/add.jsp").forward(request, response);return;
}//获取文件路径
String realPath = this.getServletContext().getRealPath("/upload");
File dir= newFile(realPath);if(!dir.exists()){
dir.mkdirs();
}//指定上传的文件夹和文件名
realName =item.getName();//指定长传的文件夹和文件名//完善2:为了防止文件的同名覆盖,上传到服务器端的文件重新命名
UUID uuid =UUID.randomUUID();
String extName= realName.substring(realName.lastIndexOf("."));
photoName= uuid.toString()+extName;
File file= newFile(dir,photoName);try{
item.write(file);
}catch(Exception e) {
e.printStackTrace();
}
}
}
}