如何使用Spring 5 WebClient上传文件

问题描述

我尝试使用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();

解决方法

尝试一下:

  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();
        }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...