Spring Обязательная часть запроса 'file' отсутствует - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь загрузить изображение с формой, оно будет изображением профиля, но я получаю сообщение об ошибке:

Необходимая часть запроса 'file' отсутствует

Я действительно новичок с пружиной, поэтому я не знаю, что не так, вот часть кода:

Это форма

<form th:action="@{/form}" th:object="${cliente}" method="post" enctype="multipart/form-data">

    <div class="form-group">
        <label>Nombre</label>
        <input class="form-control" type="text" th:field="*{nombre}" placeholder="Nombre"/>
        <small class="form-text text-danger" th:if="${#fields.hasErrors('nombre')}" th:errors="*{nombre}"></small>
    </div>

    <div class="form-group">    
        <label>Apellido</label>
                    <input class="form-control" type="text" th:field="*{apellido}" placeholder="Apellido"/>
        <small class="form-text text-danger" th:if="${#fields.hasErrors('apellido')}" th:errors="*{apellido}"></small>
    </div>
    <div class="form-group">    
        <label>Email</label>
        <input class="form-control" type="text" th:field="*{email}" placeholder="correo@ejemplo.com"/>
        <small class="form-text text-danger" th:if="${#fields.hasErrors('email')}" th:errors="*{email}"></small>
    </div>
    <div class="form-group">    
        <label>Fecha</label>
        <input class="form-control" type="text" th:field="*{createAt}" placeholder="DD/MM/YYYY"/>
        <small class="form-text text-danger" th:if="${#fields.hasErrors('createAt')}" th:errors="*{createAt}"></small>
    </div>
    <div class="form-group">
        <label>Imagen</label>
        <input type="file" name="file" class="form-control" th:field="*{foto}">
    </div>
    <div class="form-group">    
        <input class="btn btn-primary" type="submit" value="Guardar Cambios" />
    </div>

 <input type="hidden" th:field="*{id}" />
</form>

Этофункция контроллера

@RequestMapping(value="/form", method=RequestMethod.POST)
    public String guardar(@Valid Cliente cliente, BindingResult result, 
@RequestParam("file") MultipartFile foto, RedirectAttributes flash) {

    String mensaje;

    if(result.hasErrors()) {
        return "form";
    }

    if(!foto.isEmpty()) {
        Path directorioRecursos = Paths.get("src//main//resources//static/uploads");
        String pathRoot = directorioRecursos.toFile().getAbsolutePath();
        try {
            byte[] bytes = foto.getBytes();

            Path rutaCompleta = Paths.get(pathRoot + "//" + foto.getOriginalFilename());

            Files.write(rutaCompleta, bytes);

            flash.addFlashAttribute("info", "Foto subida correctamente");

            cliente.setFoto(foto.getOriginalFilename());

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    if(cliente.getId() != null) {
        mensaje = "Cliente actualizado correctamente";
    }
    else {
        mensaje = "Cliente creado correctamente";
    }

    clienteservice.save(cliente);
    flash.addFlashAttribute("success", mensaje);
    return "redirect:listar";           
}

Это свойства моего приложения

spring.http.multipart.file-size=10MB
spring.http.multipart.max-request-size=10MB
spring.http.multipart.enabled=true

Вы видите, что не так?

1 Ответ

0 голосов
/ 12 июня 2019

вы присоединяете файл к строковому полю с помощью th: field = "* {foto}",

удаляете часть th: field во входных данных, должно быть так:

                        <input type="file" name="file" class="form-control" /> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...