如何使用Spring 5的webClient上传文件

huangapple go评论101阅读模式
英文:

How to upload file with Spring 5 webClient

问题

  1. MultipartBodyBuilder builder = new MultipartBodyBuilder();
  2. builder.part("subject", parametres.getSubject());
  3. builder.part("lifetime", parametres.getLifeTime());
  4. builder.part("comment", parametres.getComment());
  5. builder.part("encrypted", parametres.getEncrypted());
  6. builder.part("file", new FileSystemResource(file)).filename(file.getName()); //file is a java.io.File
  7. ClientResponse response = getClient().post()
  8. .uri("/messages")
  9. .body(BodyInserters.fromMultipartData(builder.build()))
  10. .header(PlinePlexHeaderEnum.HTTP_HEADER_PROCURATION_USER_ID.value(), idUser))
  11. .header(HttpHeaders.CONTENT_TYPE, MediaType.MULTIPART_FORM_DATA_VALUE)
  12. .exchange().block();
英文:

I try to upload files with webClient Spring5 (multipart/form-data), but I got 400 Badrequest there is my code (when i try with restTemplate all work fine), don't understand why not work with webclient, any help is precious, thanks in advance...

  1. MultipartBodyBuilder builder = new MultipartBodyBuilder();
  2. builder.part("subject", parametres.getSubject());
  3. builder.part("lifetime", parametres.getLifeTime());
  4. builder.part("comment", parametres.getComment());
  5. builder.part("encrypted", parametres.getEncrypted());
  6. builder.part("file", new FileSystemResource(file)).filename(file.getName()) //file is a java.io.File`
  7. ClientResponse response = getClient().post()
  8. .uri("/messages")
  9. .body(BodyInserters.fromMultipartData(builder.build()))
  10. .header(PlinePlexHeaderEnum.HTTP_HEADER_PROCURATION_USER_ID.value(), idUser))
  11. .header(HttpHeaders.CONTENT_TYPE, MediaType.MULTIPART_FORM_DATA_VALUE)
  12. .exchange().block();

答案1

得分: 2

  1. final WebClient webClient = webClientBuilder.build();
  2. webClient.post()
  3. .uri("http://hostname:port/messages")
  4. .contentType(MediaType.MULTIPART_FORM_DATA)
  5. .header(PlinePlexHeaderEnum.HTTP_HEADER_PROCURATION_USER_ID.value(), idUser))
  6. .body(BodyInserters.fromMultipartData(buildMultipartBody(file, parametres)))
  7. .retrieve()
  8. .bodyToMono(String.class)
  9. .block();
  10. }
  11. private MultiValueMap<String, HttpEntity<?>> buildMultipartBody(File file, Parametres parametres) {
  12. MultipartBodyBuilder builder = new MultipartBodyBuilder();
  13. builder.part("file", new FileSystemResource(file));
  14. builder.part("subject", parametres.getSubject());
  15. builder.part("lifetime", parametres.getLifeTime());
  16. builder.part("comment", parametres.getComment());
  17. builder.part("encrypted", parametres.getEncrypted());
  18. return builder.build();
  19. }
英文:

Try this:

  1. final WebClient webClient = webClientBuilder.build();
  2. webClient.post()
  3. .uri(&quot;http://hostname:port/messages&quot;)
  4. .contentType(MediaType.MULTIPART_FORM_DATA)
  5. .header(PlinePlexHeaderEnum.HTTP_HEADER_PROCURATION_USER_ID.value(), idUser))
  6. .body(BodyInserters.fromMultipartData(buildMultipartBody(file, parametres)))
  7. .retrieve()
  8. .bodyToMono(String.class)
  9. .block();
  10. }
  11. private MultiValueMap &lt; String, HttpEntity &lt;&lt; ? &gt;&gt; buildMultipartBody(private File file, private Parametres parametres) {
  12. MultipartBodyBuilder builder = new MultipartBodyBuilder();
  13. builder.part(&quot;file&quot;, new FileSystemResource(file));
  14. builder.part(&quot;subject&quot;, parametres.getSubject()); `
  15. builder.part(&quot;lifetime&quot;, parametres.getLifeTime());`
  16. builder.part(&quot;comment&quot;, parametres.getComment()); `
  17. builder.part(&quot;encrypted&quot;, parametres.getEncrypted());`
  18. return builder.build();
  19. }

huangapple
  • 本文由 发表于 2020年10月4日 19:18:23
  • 转载请务必保留本文链接:https://go.coder-hub.com/64193940.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定