SpringBoot实现上传头像功能失败

最近在用SpringBoot+thymeleaf+mysql写一个上传头像的功能,但是选择头像上传之后浏览器跳转失败,并出现如下界面:

img

在idea里面有如下警告,说是字段错误,但是我检查我的字段名和类型都没错误,很是疑惑:

2023-08-28 15:49:15.543  WARN 27768 --- [nio-8989-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors<EOL>Field error in object 'student' on field 'images': rejected value [org.springframework.web.multipart.commons.CommonsMultipartFile@16dd591b]; codes [typeMismatch.student.images,typeMismatch.images,typeMismatch.java.lang.String,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.images,images]; arguments []; default message [images]]; default message [Failed to convert property value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'java.lang.String' for property 'images'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'java.lang.String' for property 'images': no matching editors or conversion strategy found]]
2023-08-28 15:50:01.294  WARN 27768 --- [nio-8989-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors<EOL>Field error in object 'student' on field 'images': rejected value [org.springframework.web.multipart.commons.CommonsMultipartFile@565ec8fe]; codes [typeMismatch.student.images,typeMismatch.images,typeMismatch.java.lang.String,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.images,images]; arguments []; default message [images]]; default message [Failed to convert property value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'java.lang.String' for property 'images'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'java.lang.String' for property 'images': no matching editors or conversion strategy found]]


主要代码如下:

@PostMapping("/add")
    public String addStudent(MultipartFile images,Student student) throws IOException {
        // 指定上传文件的保存路径
        String uploadPath = "D:\\develop\\images";
        if (!images.isEmpty()) {
            //生成唯一文件名
            String filename = UUID.randomUUID().toString() + "." + StringUtils.getFilenameExtension(images.getOriginalFilename());
            images.transferTo(new File(uploadPath, filename));
            student.setImages(filename);
        }
        studentService.save(student);
        return "redirect:/emp/findAll";
    }

显示所有学生html页面:

<tr  th:class="${stuStat.odd}?'row1':'row2'" th:each="stu,stuStat : ${students}">
                    <td>
                        <span th:text="${stu.id}"/>
                    </td>
                    <td>
                        <span th:text="${stu.name}"/>
                    </td>
                    <td>
                        <span th:text="${stu.age}"/>
                    </td>
                    <td>
                        <span th:text="${stu.score}"/>
                    </td>
                    <td>
                        <span th:text="${#dates.format(stu.birthday,'yyyy-MM-dd')}"/>
                    </td>
                    <td>
                        <span th:text="${stu.email}"/>
                    </td>
                    
                        <img th:src="@{'/images/' + ${stu.images}}" width="100" height="100" alt="Images">                    </td>
                    <td>
                        <a th:href="@{/emp/delete(id=${stu.id})}">delete stu</a>&nbsp;|&nbsp;
                        <a th:href="@{/emp/find(id=${stu.id})}">update stu </a>
                    </td>
                </tr>


添加学生的表单页:

<form th:action="@{/emp/add}" method="post" enctype="multipart/form-data">
                <table cellpadding="0" cellspacing="0" border="0"
                       class="form_table">
                    <tr>
                        <td valign="middle" align="right">
                            name:
                        </td>
                        <td valign="middle" align="left">
                            <input type="text" class="inputgri" name="name" />
                        </td>
                    </tr>

                    <tr>
                        <td valign="middle" align="right">
                            age:
                        </td>
                        <td valign="middle" align="left">
                            <input type="text" class="inputgri" name="age" />
                        </td>
                    </tr>
                    <tr>
                        <td valign="middle" align="right">
                            score:
                        </td>
                        <td valign="middle" align="left">
                            <input type="text" class="inputgri" name="score" />
                        </td>
                    </tr>
                    <tr>
                        <td valign="middle" align="right">
                            birthday:
                        </td>
                        <td valign="middle" align="left">
                            <input type="date" class="inputgri" name="birthday" />
                        </td>
                    </tr>
                    <tr>
                        <td valign="middle" align="right">
                            email:
                        </td>
                        <td valign="middle" align="left">
                            <input type="text" class="inputgri" name="email" />
                        </td>
                    </tr>
                    <tr>
                        <td valign="middle" align="right">
                            images:
                        </td>
                        <td valign="middle" align="left">
                            <input type="file" class="inputgri"  name="images" />
                        </td>
                    </tr>
                </table>
                <p>
                    <input type="submit" class="button" value="Confirm" />
                </p>
            </form>

【相关推荐】



  • 这篇博客: SpringBoot + thymeleaf + mysql 实现读取图片并显示中的 SpringBoot + thymeleaf + mysql 实现读取图片并显示 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    业务场景及实现思路:设置图片静态存储路径,通过多级动态联动下拉框实现图片显示及翻页查看。页面渲染前通过数据库选择查询动态获取下拉框参数,点击联动选择后将结果通过url传递至后端。后端Controller通过HttpServletRequest获取页面url路径中的选择结果,利用File的listFiles()和.size()方法获取文件下图片集合和图片数量,进而通过Model的addAttribute返回前端渲染,实现筛选后读取并显示图片。



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^