我正在从jsp保存图像文件并在控制器中重命名它
问题是同一段代码在控制器的一个部分中起作用,而在控制器的另一部分中却不起作用
这是两种情况下都相同的jsp代码:
<div class="form-group "> <label for="photo">Photo:</label> <form:input type="file" class="filestyle" path="studentPhoto" id="studentPhoto" placeholder="Upload Photo" required="required" /> </div>
这是控制器按预期方式工作的部分:-
@RequestMapping(value = "/student", params = "add", method = RequestMethod.POST) public String postAddStudent(@ModelAttribute @Valid Student student, BindingResult result, Model model) throws IOException { if (result.hasErrors()) { System.out.println(result.getAllErrors().toString()); model.addAttribute("examination_names", ExaminationName.values()); ArrayList<Role> roles = new ArrayList<Role>(); roles.add(Role.STUDENT); model.addAttribute("roles", roles); return "student/add"; } else { System.out.println("Inside postAddStudent"); System.out.println(student); student = studentService.save(student); String PROFILE_UPLOAD_LOCATION = servletContext.getRealPath("/") + File.separator + "resources" + File.separator + "student_images" + File.separator; BufferedImage photo = ImageIO.read(new ByteArrayInputStream(student .getStudentPhoto().getBytes())); File destination = new File(PROFILE_UPLOAD_LOCATION + student.getId() + "_photo" + ".jpg"); ImageIO.write(photo, "jpg", destination); return "redirect:student?id=" + student.getId(); } }
以下是控制器无法正常工作并显示错误的部分:-
Failed to convert property value of type java.lang.String to required type org.springframework.web.multipart.MultipartFile for property studentPhoto; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.MultipartFile] for property studentPhoto: no matching editors or conversion strategy found
控制器代码
@RequestMapping(value = "/examForm", params = "edit", method = RequestMethod.POST) public String postEditExamForm(@ModelAttribute @Valid Student student, BindingResult result, Model model) throws IOException { String PROFILE_UPLOAD_LOCATION = servletContext.getRealPath("/") + File.separator + "resources" + File.separator + "student_images" + File.separator; if (result.hasErrors()) { model.addAttribute("flags", Flag.values()); return "examForm/edit"; } else { Student updatedStudent = studentService.findOne(student.getId()); updatedStudent.setDisqualifiedDescription(student .getDisqualifiedDescription()); student = studentService.update(updatedStudent); BufferedImage photo = ImageIO.read(new ByteArrayInputStream(student .getStudentPhoto().getBytes())); File destination = new File(PROFILE_UPLOAD_LOCATION + student.getId() + "_photo" + ".jpg"); ImageIO.write(photo, "jpg", destination); return "redirect:examForm?id=" + updatedStudent.getId(); } }
您enctype="multipart/form-data"在<form:form...>标签中丢失了。
enctype="multipart/form-data"
<form:form...>
由于您的形式不有enctype="multipart/form-data"spring正在采取<form:input type="file"..的String和投掷的错误,当它不能转换String到MultipartFile的studentPhoto类型MultipartFile的Student类。
<form:input type="file"..
String
MultipartFile
studentPhoto
Student
这是完整的源代码。