DiskFileItemFactory
1、DiskFileItemFactory该类的作用
将请求消息实体中的每一个项目都封装成一个DiskFileItem(DiskFileItem是FileItem接口的实现类)对象,这个任务就是DiskFileItemFactory实现的。
2、DiskFileItemFactory该类的属性
/**该属性是把文件保存在内存中还是磁盘上的临时文件夹的系统默认的临界值,10kb*/
public static final int DEFAULT_SIZE_THRESHOLD = 10240;
/**
如果需要保存的文件大于临界值,需要建立一个临时文件。
默认采用系统默认的临时文件路径,可以通过系统属性 java.io.tmpdir获取。
如代码:System.getProperty("java.io.tmpdir");
*/
private File repository;
/**文件保存在内存中还是磁盘临时文件夹的临界值,这个属性是为了用户自己设置临界值而设定的*/
private int sizeThreshold;
/**临时文件的跟踪器*/
private FileCleaningTracker fileCleaningTracker;
3、DiskFileItemFactory该类的方法
/**
空构造器
*/
public DiskFileItemFactory(){
this(10240, null);
}
/**
带参构造
*/
public DiskFileItemFactory(int sizeThreshold, File repository){
this.sizeThreshold = 10240;
this.sizeThreshold = sizeThreshold;
this.repository = repository;
}
/**
属性repository临时文件夹的set和get方法
*/
public File getRepository(){
return repository;
}
public void setRepository(File repository){
this.repository = repository;
}
/**
属性sizeThreshold的set和get方法
*/
public int getSizeThreshold(){
return sizeThreshold;
}
public void setSizeThreshold(int sizeThreshold){
this.sizeThreshold = sizeThreshold;
}
/**
根据DiskFileItemFactory相关配置将每一个请求消息实体项目创建成DiskFileItem 实例,并返回。该方法从来不需要我们亲自调用,FileUpload组件在解析请求时内部使用。
*/
public FileItem createItem(String fieldName, String contentType, boolean isFormField, String fileName){
DiskFileItem result = new DiskFileItem(fieldName, contentType, isFormField, fileName, sizeThreshold, repository);
FileCleaningTracker tracker = getFileCleaningTracker();
if(tracker != null)
tracker.track(result.getTempFile(), result);
return result;
}
/**
FileCleaningTracker 的set和get方法
*/
public FileCleaningTracker getFileCleaningTracker(){
return fileCleaningTracker;
}
public void setFileCleaningTracker(FileCleaningTracker pTracker){
fileCleaningTracker = pTracker;
}
4、DiskFileItemFactory该类的使用
//创建上传文件句柄
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
//设置内存缓冲区的大小,超过该值将文件放在磁盘临时文件夹中
diskFileItemFactory.setSizeThreshold(1024*4);
//设置磁盘临时文件夹的位置
diskFileItemFactory.setRepository(new File("F:\\uploadFileTemp"))