I am working to upload the images as avatars of the users, but it throws an error to me when trying to write the image and to keep it, I am working with MultiparFile of Spring, but I do not have much knowledge of it.
This is my RequestMapping to upload the image:
@RequestMapping(value = "/teachers/images", method = RequestMethod.POST, headers = ("content-type=multipart/form-data"))
public ResponseEntity<byte[]> uploadTeacherImage(@RequestParam("idTeacher") Long idTeacher, @RequestParam("file")MultipartFile multipartFile, UriComponentsBuilder uriComponentsBuilder) {
if (idTeacher == null) {
return new ResponseEntity(new CustomErrorType("Please set id_teacher"), HttpStatus.NO_CONTENT);
}
if (multipartFile.isEmpty()) {
return new ResponseEntity(new CustomErrorType("Please select a file to upload"), HttpStatus.NO_CONTENT);
}
Teacher teacher = _teacherService.findById(idTeacher);
if (teacher == null) {
return new ResponseEntity(new CustomErrorType("Teacher with id_teacher: " + idTeacher + " not found"), HttpStatus.NOT_FOUND);
}
if (!teacher.getAvatar().isEmpty() || teacher.getAvatar() != null) {
String fileName = teacher.getAvatar();
Path path = Paths.get(fileName);
File f = path.toFile();
if (f.exists()) {
f.delete();
}
}
try {
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dateName = dateFormat.format(date);
String fileName = String.valueOf(idTeacher)
+ "-pictureTaecher-" + dateName + "."
+ multipartFile.getContentType().split("/")[1];
teacher.setAvatar(TEACHER_UPLOADED_FOLDER + fileName);
byte[] image = multipartFile.getBytes();
Path path = Paths.get(TEACHER_UPLOADED_FOLDER + fileName);
Files.write(path, image);
_teacherService.update(teacher);
return ResponseEntity.ok().contentType(MediaType.IMAGE_JPEG).body(image);
} catch (Exception e) {
e.printStackTrace();
return new ResponseEntity(
new CustomErrorType("Error during upload: " + multipartFile.getOriginalFilename()),
HttpStatus.CONFLICT
);
}
}