当前位置: > > > SpringBoot - 网络请求客户端WebClient使用详解5(上传文件)

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";
    }
}
评论0