【问题标题】:How to upload file with Spring 5 webClient如何使用 Spring 5 webClient 上传文件
【发布时间】:2021-01-19 10:51:42
【问题描述】:

我尝试使用 webClient Spring5 (multipart/form-data) 上传文件,但我收到 400 Badrequest 有我的代码(当我尝试使用 restTemplate 时一切正常),不明白为什么不使用 webclient,任何帮助很宝贵,在此先感谢...

MultipartBodyBuilder builder = new MultipartBodyBuilder();

builder.part("subject", parametres.getSubject());

builder.part("lifetime", parametres.getLifeTime());

builder.part("comment", parametres.getComment());

builder.part("encrypted", parametres.getEncrypted());

builder.part("file", new FileSystemResource(file)).filename(file.getName()) //file is a java.io.File`
ClientResponse response = getClient().post()
     .uri("/messages")
     .body(BodyInserters.fromMultipartData(builder.build()))
     .header(PlinePlexHeaderEnum.HTTP_HEADER_PROCURATION_USER_ID.value(), idUser))
     .header(HttpHeaders.CONTENT_TYPE, MediaType.MULTIPART_FORM_DATA_VALUE)
     .exchange().block();

【问题讨论】:

    标签: java spring-boot webclient reactor


    【解决方案1】:

    试试这个:

      final WebClient webClient = webClientBuilder.build();
            webClient.post()
                .uri("http://hostname:port/messages")
                .contentType(MediaType.MULTIPART_FORM_DATA)
                .header(PlinePlexHeaderEnum.HTTP_HEADER_PROCURATION_USER_ID.value(), idUser))
                .body(BodyInserters.fromMultipartData(buildMultipartBody(file, parametres)))
                .retrieve()
                .bodyToMono(String.class)
                .block();
            }
    
            private MultiValueMap < String, HttpEntity << ? >> buildMultipartBody(private File file, private Parametres parametres) {
                MultipartBodyBuilder builder = new MultipartBodyBuilder();
                builder.part("file", new FileSystemResource(file));
                builder.part("subject", parametres.getSubject());       `
                builder.part("lifetime", parametres.getLifeTime());`
                builder.part("comment", parametres.getComment());   `
                builder.part("encrypted", parametres.getEncrypted());`
                return builder.build();
            }
    

    【讨论】:

    • 谢谢马斯。为了回答,我尝试了你的建议,但我收到了 400 个错误请求
    • 我想在我的情况下使用相同的解决方案......任何人都可以确认(@M.Mas 或 @kakabali)它是否是一个工作解决方案。
    猜你喜欢
    • 2020-07-28
    • 2021-09-30
    • 1970-01-01
    • 2018-01-07
    • 2018-02-19
    • 2021-03-07
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多