Определение метода RequestBody
create
в OkHttp: create(MediaType contentType, byte[] content)
. Он ожидает сначала MediaType
и вторую полезную нагрузку (либо byte[]
, File
, либо другие форматы ).
Итак, сначала вы должны изменить порядок метода аргументы и второе преобразовывают MultipartFile
из Spring в правильный формат, который принимает метод create()
, например byte[]
или File
:
OkHttpClient client = new OkHttpClient();
MultipartBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("myFile", myFile.getName(), RequestBody.create(MediaType.parse("pdf"), file)
.addFormDataPart("fileMeta", fileMeta)
.build();
В StackOverflow уже доступно несколько решений для преобразования MultipartFile
в File
: Как преобразовать составной файл в файл?
ОБНОВЛЕНИЕ : Пример использования RestTemplate
@RestController
public class FileSendingController {
@PostMapping("/files")
public void streamFile(@RequestParam("file") MultipartFile file) {
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("file", file);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
RestTemplate restTemplate = new RestTemplate();
restTemplate.postForEntity("http://upload.to", requestEntity, String.class);
}
}