第一步:
DiskFileItemFactory fiFactory = new DiskFileItemFactory();创建用于解析文件的工厂类,同时设置缓冲区的位置和大小
fiFactory.setSizeThreshold(1024*8);//8K
fiFactory.setRepository(new File("d:/a"));
第二步:
ServletFileUpload upload = new ServletFileUpload(fileFactory); //建文件上传的类并设置解析文件的工厂类。
upload.setFileSizeMax(1024*1024*5);//设置每个文件最大为5M
upload.setSizeMax(1024*1024*8);//所有上传文件大小之和的最大值,此处设最多能上传8M
List<FileItem> list = upload.parseRequest(request);/获得提交上来的文件
第三步:
String fileName = fi.getName();//文件名
//文件名不能用中文,必须转换成ascii码的格式,而且文件名不能重复(必须保证唯一),因此采用UUID来实现
String newFileName = UUID.randomUUID().toString().replace("-", "");
newFileName =newFileName+ext;
//☆打散目录(因为对于普通机器,一个文件夹如果存储的文件个数超过1000,性能将会急剧下降!! )
String dir1 = Integer.toHexString( fileName.hashCode() & 0xf );
String dir2 = Integer.toHexString( (fileName.hashCode() & 0xf0)>>4 );
File dir = new File(path+"/"+dir1+"/"+dir2 );
if(!dir.exists()){
dir.mkdirs();
}
File file = new File(path+"/"+dir1+"/"+dir2+"/"+newFileName);
fi.write(file);
if(fi!=null){//finally 清临时文件
fi.delete();
}