当前位置:   article > 正文

RestTemplate发送请求携带文件_resttemplate发送文件

resttemplate发送文件

        在工作上遇到这样一个需求,就是调用我们公司的AI平台,将图片文件发送给他们,他们进行解析然后返回解析结果。

        首先用python进行调用一次,发送捕获的接口是这样的:

 那么用java代码该如何组装这个请求发送过去呢?

  1. public static<T> String sendPostWithFile(String url, Map<String,String> head, Map<String,T> body, File file) throws IOException {
  2. HttpHeaders requestHeaders = new HttpHeaders();
  3. requestHeaders.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8")));
  4. head.forEach((k,v)->{
  5. requestHeaders.add(k,v);
  6. });
  7. requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
  8. MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
  9. body.forEach((k,v)->{
  10. params.add(k,v);
  11. });
  12. if(file != null && file.exists()){
  13. MultiValueMap<String, String> fileMap = new LinkedMultiValueMap<>();
  14. ContentDisposition contentDisposition = ContentDisposition
  15. .builder("form-data")
  16. .name(file.getPath())
  17. .filename(file.getName())
  18. .build();
  19. fileMap.add(HttpHeaders.CONTENT_DISPOSITION,contentDisposition.toString());
  20. byte[] fileContent = readContentIntoByteArray(file); //获取文件的字节流
  21. HttpEntity<byte[]> fileEntity = new HttpEntity<>(fileContent, fileMap);
  22. params.add(contentDisposition.toString(),fileEntity);
  23. }
  24. HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(params, requestHeaders);
  25. HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
  26. httpRequestFactory.setConnectionRequestTimeout(30000);
  27. httpRequestFactory.setConnectTimeout(30000);
  28. httpRequestFactory.setReadTimeout(30000);
  29. RestTemplate restTemplate = new RestTemplate(httpRequestFactory);
  30. List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
  31. converters.removeIf(httpMessageConverter -> httpMessageConverter instanceof StringHttpMessageConverter);
  32. converters.add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));
  33. String res = restTemplate.postForObject(url, httpEntity, String.class);
  34. log.info("请求返回结果:"+res);
  35. return res;
  36. }

1.设置请求头,并且设置ContentType为multipart/form-data形式的。

2.组装请求体

3.将文件处理好后,增加到请求体中。

4.发送请求。

这里有一个问题就是,我调用的这个接口返回的中文是unicode编码的,目前还在赵原因,在此先做一个记录。后续找到原因会补充在评论下。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/302889
推荐阅读
相关标签
  

闽ICP备14008679号