一.引入依赖
在pom文件中添加依赖,以使用CommonsMultipartResolver取代默认的Resovler处理文件上传。
二. 配置yml文件
1.排除默认的Resovler。
2.设置图片存放地址,图片上传大小等信息。
三. 创建实现类实现WebMvcConfigurer接口
-
@Component:这个注解表示该类是一个组件,会被 Spring自动扫描并进行相关的管理和注入。
-
@Value:这个注解用于将配置文件中的值注入到对应的变量中。在这里,path、maxPicSize 和 maxPerSize分别对应了配置文件中的 ${user.pic}、${pic.size} 和 ${pic.per.size}。
-
addResourceHandlers方法:这个方法用于配置静态资源的访问路径。通过调用 ResourceHandlerRegistry 的 addResourceHandler 方法,可以指定某个 URL 路径访问静态资源,而 addResourceLocations 方法则指定了真实的资源路径。在这里,我通过 addResourceHandler("/**")将所有请求映射到静态资源路径,包括文件上传目录、static 目录、public 目录和 webapp 目录。
-
multipartResolver 方法:这个方法用于创建一个 CommonsMultipartResolver 对象,用于解析请求中的文件上传数据。通过调用 setMaxUploadSize 和 setMaxUploadSizePerFile 方法,可以设置最大的上传文件大小和单个文件的最大大小。
四. 创建工具类
1.UPLOAD_PARAM_URL、UPLOAD_PARAM_ MESSAGE 和 UPLOAD_PARAM_STATUS:这些常量定义了返回结果的 JSON 对象中的键名。
·随机名称上传文件到指定目录
1.uploadWithRandomName 方法:这个方法使用随机生成的文件名将文件上传到指定目录。首先,获取原始文件名并提取文件后缀名。然后,使用 UUID.randomUUID() 生成一个唯一的文件名,并在后面拼接上文件后缀名。接下来,创建一个文件对象,并通过 file.transferTo(f) 方法将文件保存到指定目录。最后,将文件路径、上传成功信息和状态(true)封装为一个 JSON 对象并返回。
·原文件名称上传文件到指定目录
1.uploadWithOriginalName 方法:这个方法使用原始文件名将文件上传到指定目录。首先,获取原始文件名,并检查是否包含 Unix 或 Windows 的路径分隔符。如果有分隔符,截取最后一个分隔符之后的字符串作为文件名。然后,创建一个文件对象,并通过 file.transferTo(f) 方法将文件保存到指定目录。最后,将文件路径、上传成功信息和状态(true)封装为一个 JSON 对象并返回。
五.创建控制类
1.@Value("${user.pic}")
private String path;:这行代码使用了 @Value 注解,将配置文件中名为 user.pic 的属性的值注入到 path 变量中,从而指定了上传文件的保存路径。
public final class ApiConstant { private ApiConstant(){} public static final String ROUTE_UPLOAD="/upload"; }
2.@PostMapping(ApiConstant.ROUTE_UPLOAD):这个注解表示该方法处理 POST 请求,并且处理的 URL 是 ApiConstant.ROUTE_UPLOAD,即 /upload。
3.@RequestParam("avatar") MultipartFile file:这个注解表示将请求参数 avatar 对应的值(即上传的文件)注入到 file 变量中。MultipartFile 是 Spring 框架提供的一个用于处理文件上传的接口,它封装了上传的文件内容、文件名等信息。
4.FileUtil.uploadWithRandomName(file,path):这个方法使用了一个工具类 FileUtil 中的静态方法 uploadWithRandomName,将上传的文件保存到指定的路径下,并返回一个包含上传结果信息的 JSON 对象。
5.return new ApiResult(...):这行代码创建了一个 ApiResult 对象,将上传结果封装成 JSON 格式并返回给客户端。
六.接口调用
涉及到文件上传,使用Postman应用测试接口。
上传文件成功!