我正在尝试使用RESTTEMPLATE上传到服务器URL上传图像(MultipartFile)。从Content-Type: image/jpg
发送邮递员的请求,并从Body中发送为二进制文件的图像。
Springboot中的方法实现:
public ResponseEntity<String> uploadImage(MultipartFile file) {
restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter());
restTemplate.getMessageConverters().add(new BufferedImageHttpMessageConverter());
LinkedMultiValueMap<String,Object> params = new LinkedMultiValueMap<>();
params.add("file", new FileSystemResource(file));
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.IMAGE_JPEG);
HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, httpHeaders);
return restTemplate.exchange(UPLOAD_URL, HttpMethod.POST, requestEntity, String.class);
例外:
org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.util.LinkedMultiValueMap] and content type [image/jpeg]
上传与内容类型MediaType.MULTIPART_FORM_DATA
一起使用,但我使用的REST服务仅接受image/jpg
作为HTTP Content-type。
谢谢。
您的远程服务接受image/jpg
,因此您应该流字节而不是多部分:
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "image/jpeg");
Resource res = new InputStreamResource(file.getInputStream());
HttpEntity<Resource> entity = new HttpEntity<>(res, headers);
template.exchange(UPLOAD_URL, HttpMethod.POST, entity , String.class);
RestTemplate
具有ResourceHttpMessageConverter
,它将您的多部分流向您的服务。