Spring MVC 为 文 件 上 传 提 供 了 直 接 的 支 持 , 这 种 支 持 是 通 过 即 插 即 用 的MultipartResolver 实现的。
Spring 用 Jakarta Commons FileUpload 技术实现了一个 MultipartResolver 实现类:CommonsMultipartResolver
Spring MVC 上下文中默认没有装配 MultipartResovler,因此默认情况下不能处理文件的 上 传 工 作 , 如 果 想 使 用 Spring 的 文 件 上 传 功 能 , 需 现 在 上 下 文 中 配 置MultipartResolver
配置 MultipartResolver
defaultEncoding: 必须和用户 JSP 的 pageEncoding 属性一致,以便正确解析表单的内容 , 为 了 让 CommonsMultipartResolver 正 确 工 作 , 必 须 先 将 Jakarta Commons FileUpload 及 Jakarta Commons io 的类包添加到类路径下。
文件上传示例
导入 jar 包
commons-fileupload-1.2.1.jar
commons-io-2.0.jar
配置文件上传解析器
<!-- 配置文件上传解析器
id 必须是"multipartResolver",否则,会报错误:
java.lang.IllegalArgumentException: Expected
MultipartHttpServletRequest: is a MultipartResolver configured?
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="UTF-8"></property><property name="maxUploadSize" value="1024000"></property>
</bean>
上传页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>$Title$</title></head><body><form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data"><input type="file" name="file"><input type="text" name="name"><input type="submit"></form></body>
</html>
后台controller
/*** SpringMVC方式的文件上传** @param request* @return* @throws Exception*/@RequestMapping(value = "/upload")public String fileupload2(HttpServletRequest request, MultipartFile upload,String name) throws Exception {System.out.println("SpringMVC方式的文件上传...");// 先获取到要上传的文件目录String path = request.getSession().getServletContext().getRealPath("/uploads");// 创建File对象,一会向该路径下上传文件File file = new File(path);// 判断路径是否存在,如果不存在,创建该路径if (!file.exists()) {file.mkdirs();}// 获取到上传文件的名称String filename = upload.getOriginalFilename();String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();// 把文件的名称唯一化filename = uuid + "_" + filename;// 上传文件upload.transferTo(new File(file, filename));return "success";}