
commons-fileupload是 Apache 提供的经典 Java Web 文件上传组件依赖 commons-io提供IO工具方法二者配套使用用于 Servlet 传统项目实现multipart/form-data方式文件上传。适用场景原生Servlet、SSM老项目SpringMVC出现之前主流上传方案SpringMVC底层早期也是封装该组件CommonsFileUploadSupport二、Maven依赖!-- 文件上传核心包 --dependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.5/version/dependency!-- IO工具依赖fileupload必须依赖它 --dependencygroupIdcommons-io/groupIdartifactIdcommons-io/artifactIdversion2.16.1/version/dependency三、核心APIServletFileUpload上传解析入口DiskFileItemFactory文件工厂配置临时文件、内存阈值FileItem封装表单字段普通参数/上传文件isFormField()判断是否普通文本参数getName()获取上传文件名getInputStream()获取文件流write(File dest)保存文件四、最简代码示例原生Servlet// 1. 创建工厂DiskFileItemFactoryfactorynewDiskFileItemFactory();// 设置内存临界值超过该大小写入临时磁盘factory.setSizeThreshold(1024*1024);// 指定临时目录factory.setRepository(newFile(D:/temp));// 2. 创建上传解析器ServletFileUploaduploadnewServletFileUpload(factory);// 限制单个文件最大、总上传大小upload.setFileSizeMax(10*1024*1024);upload.setSizeMax(50*1024*1024);try{// 解析请求得到所有表单项ListFileItemitemListupload.parseRequest(request);for(FileItemitem:itemList){if(!item.isFormField()){// 文件StringfileNameitem.getName();item.write(newFile(D:/upload/fileName));}else{// 普通表单参数Stringnameitem.getFieldName();Stringvalueitem.getString(UTF-8);}}}catch(Exceptione){e.printStackTrace();}五、重要注意事项请求头要求前端表单必须enctypemultipart/form-data否则组件无法解析。formmethodpostenctypemultipart/form-datainputtypefilenamefile/form编码问题解析普通参数时建议指定编码item.getString(UTF-8)防止中文乱码。和SpringMVC关系SpringMVC 提供CommonsMultipartResolver内部就是封装这套APISpringBoot 2.x 默认使用StandardServletMultipartResolverServlet3.0内置上传不需要这两个包新项目不推荐引入 commons-fileupload。优缺点✅ 兼容老旧Servlet容器、灵活可控❌ 需要手动处理临时文件清理Servlet3.0之后有原生方案可替代不再是首选方案六、版本提醒commons-fileupload 1.4 最低要求Java 8不要混用高低版本 commons-io容易出现NoSuchMethodError如果你需要我可以补充SpringMVC整合 CommonsFileUpload 配置上传文件名去重、类型校验、异常捕获完整工具类和 Servlet3.0 原生上传方案对比