Массив байтов POST в нескольких частях с использованием Spring RestTemplate - PullRequest
2 голосов
/ 03 октября 2019

Я пытаюсь отправить данные из нескольких частей / форм, используя Spring RestTemplate с байтовым массивом в качестве файла для загрузки, и он продолжает сбой (Сервер отклоняет с различными видами ошибок).

Яиспользуя MultiValueMap с ByteArrayResource. Я что-то упускаю?

1 Ответ

2 голосов
/ 03 октября 2019

Да, чего-то не хватает.

Я нашел эту статью:

https://medium.com/@voziv/posting-a-byte-array-instead-of-a-file-using-spring-s-resttemplate-56268b45140b

Автор упоминает, что для POST-массива байтов используется Spring RestTemplateнужно переопределить getFileName () объекта ByteArrayResource.

Вот пример кода из статьи:

private static void uploadWordDocument(byte[] fileContents, final String filename) {
    RestTemplate restTemplate = new RestTemplate();
    String fooResourceUrl = "http://localhost:8080/spring-rest/foos"; // Dummy URL.
    MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();

    map.add("name", filename);
    map.add("filename", filename);

    // Here we 
    ByteArrayResource contentsAsResource = new ByteArrayResource(fileContents) {
        @Override
        public String getFilename() {
            return filename; // Filename has to be returned in order to be able to post.
        }
    };

    map.add("file", contentsAsResource);

    // Now you can send your file along.
    String result = restTemplate.postForObject(fooResourceUrl, map, String.class);

    // Proceed as normal with your results.
}

Я пробовал, и это работает!

...