Spring Webclient multipart / form-data запрос - PullRequest
0 голосов
/ 24 марта 2020

Я новичок в Java (Spring Boot) и пытаюсь отправить multipart/form-data POST-запрос на s3 для загрузки файла.

Мне удалось сделать это с помощью Spring * RestTemplate как это:

    public String uploadFile(byte[] file, Map<String, Object> fields, String url) throws URISyntaxException {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);

        MultiValueMap<String, Object> formData= new LinkedMultiValueMap<String, Object>();
        for (Map.Entry<String, Object> entry : fields.entrySet()) {
            formData.add(entry.getKey(), entry.getValue());
        }
        formData.add("file", file);
        HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<MultiValueMap<String, Object>>(formData, headers);
        String response = restTemplate.postForObject(new URI(url), request, String.class);
        return response;
    }

Затем я попытался сделать то же самое, используя webclient, но я не могу и AWS ответить The body of your POST request is not well-formed multipart/form-data.

Вот код с использованием веб-клиента:

    public String uploadFileWebc(byte[] file, Map<String, Object> fields, String url) {

        MultipartBodyBuilder builder = new MultipartBodyBuilder();
        for (Map.Entry<String, Object> entry : fields.entrySet()) {
            builder.part(entry.getKey(), entry.getValue(), MediaType.TEXT_PLAIN);
        }

        builder.part("file", file).filename("file");
        MultiValueMap<String, HttpEntity<?>> parts = builder.build();


        Void result = webClient.filter(errorHandlingFilter()).build().post().uri(url)
                .contentType(MediaType.MULTIPART_FORM_DATA)
                .contentLength(file.length)
                .bodyValue(parts)
                .retrieve()
                .bodyToMono(Void.class)
                .block();
        return "Done Uploading.";
    }

Кто-нибудь может указать, что мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...