升级至Apache Commons FileUpload 2.x时,如何设置DiskFileItemFactory的临时文件目录与阈值?
升级至Apache Commons FileUpload 2.x时,如何设置DiskFileItemFactory的临时文件目录与阈值?
我来帮你理清楚这个问题,刚好对Commons FileUpload 2.x的API变动比较熟悉~
1. 关于你问的"ASPECT"是什么?
其实这个描述有点容易让人误解,它是Commons IO构建器体系里的一个抽象概念,简单说就是构建器用来获取配置的来源(比如从某个已有实例、配置文件或者直接设置的参数)。不过在DiskFileItemFactory.Builder的场景下,你完全不用纠结这个——因为你不需要依赖什么外部的"aspect",直接通过Builder的方法手动设置参数就可以了,官方文档里的这段描述确实有点晦涩,不用太在意。
2. Path和BufferSize是否等价于旧的Repository和Threshold?
答案是完全对应,只是API命名更贴合Commons IO的统一构建器规范了:
- 旧API的
setRepository(File dir)→ 对应新Builder的setPath(Path path):这个路径就是临时文件的存放目录,和旧版的repository作用完全一样 - 旧API的
setThreshold(int threshold)→ 对应新Builder的setBufferSize(int bufferSize):这个值就是内存缓存的阈值,当上传文件的大小超过这个值时,就会把文件写入到你设置的临时目录里,和旧版的threshold功能一致
给你对应旧代码的正确写法
你原来的旧代码是:
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, dir));
在2.x版本里对应的写法应该是:
// 把原来的File类型目录转成Path(如果原来就是Path的话直接用就行) Path tempDir = dir.toPath(); // 通过Builder构建DiskFileItemFactory,设置对应的参数 DiskFileItemFactory factory = DiskFileItemFactory.builder() .setBufferSize(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD) // 对应旧的threshold .setPath(tempDir) // 对应旧的repository目录 .get(); // 创建Jakarta版本的ServletFileUpload JakartaServletFileUpload upload = new JakartaServletFileUpload(factory);
另外补充下,DiskFileItemFactory本身保留getRepository()和getThreshold()是为了兼容,你可以在构建完实例后调用这些方法验证参数是否设置正确,确保和旧代码的行为一致。
备注:内容来源于stack exchange,提问作者Zimeon
相关产品推荐
相关产品推荐

