SpringBoot - 网络请求客户端WebClient使用详解5(上传文件)
六、文件上传
1,效果图
(1)下面通过样例演示如何使用 WebClient 上传文件。这里使用 Form 表单的方式提交,上传时除了一个文件外还附带有两个自定义参数。
(2)接收方收到文件后会打印出相关参数、文件相关数据,并返回成功信息。

(3)发送方收到反馈后将反馈信息打印出来:

2,样例代码
(1)文件发送端代码如下:
@RestController
public class HelloController {
// 创建 WebClient 对象
private WebClient webClient = WebClient.builder()
.build();
@GetMapping("/test")
public void test() {
// 待上传的文件
String filePath = "/Users/hangge/Desktop/test.txt";
FileSystemResource resource = new FileSystemResource(new File(filePath));
// 封装请求参数
MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
param.add("myFile", resource);
param.add("param1", "12345");
param.add("param2", "hangge");
// 发送请求
Mono<String> mono = webClient
.post() // POST 请求
.uri("http://localhost:8080/upload") // 请求路径
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.body(BodyInserters.fromMultipartData(param))
.retrieve() // 获取响应体
.bodyToMono(String.class); //响应数据类型转换
// 输出结果
System.out.println(mono.block());
}
}
(2)文件接收端代码如下:
为方便演示,接收端这边的代码比较简单。如果想要进一步操作,比如:文件重命名、文件保存、相关上传参数的配置,可以参考我之前写的文章:
@RestController
public class HelloController {
@PostMapping("/upload")
public String upload(String param1, String param2, MultipartFile myFile) {
System.out.println("--- 接收文件 ---");
System.out.println("param1:" + param1);
System.out.println("param2:" + param2);
String originalFilename = myFile.getOriginalFilename();
System.out.println("文件原始名称:" + originalFilename);
try {
String string = new String(myFile.getBytes(), "UTF-8");
System.out.println("文件内容:" + string);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 处理文件内容...
return "OK";
}
}
