Обработать изображение из URL в SPRING BOOT

142
15 августа 2021, 06:50

Не совсем понимаю как можно полностью вытащить изображение по url с помощью Spring. У меня простой REST контроллер post

@PostMapping(value = "/upload-multiple-files", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    @ResponseBody
    public List<FileResponse> uploadMultipleFiles(
            @RequestParam(value = "url", required = false) URL request,
            @RequestParam(value = "files", required = false) @Valid @NotNull @NotBlank MultipartFile[] files
    )
{//логика}

передаю ссылку через форму

<h4>Upload URL:</h4>
<form method="POST" enctype="multipart/form-data" th:action="@{/upload-multiple-files}">
    <p><b>URL:</b><br>
        <input type="url" name="url" size="50">
    </p>
    <p><input type="submit" value="Отправить">
        <input type="reset" value="Очистить"></p>
</form>

пришла ко мне ссылка на изображение и не очень ясно как вытащить по ссылке само изображение. Подскажите пожалуйста.

Answer 1

Вы пошли не верным путем для решения поставленной задачи. Вам нужно загрузить файл из указанного URL. для этого не надо никаких enctype="multipart/form-data"

Все что вам надо это добавить несколько полей ввода с одним именем(хардкодом или средствами DHTML) и отправить форму на сервер с enctype по умолчанию(то есть не устанавливая его)

так ведь input type="url" это обычное поле ввода текста, просто наделенное маской. То есть на сервер приходит все такие же строки, ничем не отличающиеся от других текстовых полей...То есть multipart/form-data, который применяется для передачи содержимого файлов с машины клиента, на сервер вам не нужен... То есть форма будет выглядеть так:

<h4>Upload URL:</h4>
<form method="POST" th:action="@{/upload-multiple-files}">
    <p><b>URL:</b><br>
        <input type="urls" name="url" size="50">
        <input type="urls" name="url" size="50">
        <input type="urls" name="url" size="50">
        <input type="urls" name="url" size="50">
    </p>
    <p><input type="submit" value="Отправить">
        <input type="reset" value="Очистить"></p>
</form>

Для обработки нескольких текстовых полей с одним именем вам нужно указать

@PostMapping(value = "/upload-multiple-files", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    @ResponseBody
    public List<FileResponse> uploadMultipleFiles(
            @RequestParam(value = "urls", required = false) @NotEmpty String[] urls
    )
{
    foreach(String url in files) {
        URL myURL = new URL(url);
        IOUtils.copy(myURL.openStream(), new FileOutputStream("store/" + myURL.getFile()))
    }
}

Писал на коленке, чтобы передать суть, код возможно имеет ряд мелких неточностей относительно обработки ошибок и правил валидации.

READ ALSO
Оптимизация spinner

Оптимизация spinner

Мой кастомный Spinner при первом клике на него долго открывается (~3 сек)Он состоит из 25 обьектов класса Person

150
Internet Explorer и Class JS

Internet Explorer и Class JS

Столкнулся с проблемойИмеется js class

112
Определение адреса и редирект

Определение адреса и редирект

Есть простой скрипт моментального редиректа:

209
Как раскодировать файл docx из json?

Как раскодировать файл docx из json?

На http запрос я получаю следующий JSON:

161