Inserire immaggine nel database con springboot

di il
5 risposte

Inserire immaggine nel database con springboot

Salve ho creato questo semplice progetto con springboot che sostanzialmente mostra una lista di studenti nel database e permette di aggiungere modificare e eliminare uno studente volevo provare ad aggiungere anche un immaggine dello studente cha attualmente ha solo questi attributi (id,nome,cognome,email)

la prima domanda è per aggiungere un attributo che faccia riferimento alla foto cosa devo inserire ecco il codice

@Entity
@Table(name = "students")
public class Student {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	
	@Column(name = "first_Name", nullable = false)
	private String firstName;
	@Column(name = "last_Name")
	private String lastName;
	@Column(name = "email")
	private String email;
	
	public Student() {
		
	}
	public Student(String firstName, String lastName, String email) {
		super();
		this.firstName = firstName;
		this.lastName = lastName;
		this.email = email;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
	
	
}
la seconda domanda è come posso modificare il metodo gia esistente che mi consente di salvare uno studente nel database in modo tale che quando crea un nuovo oggetto di tipo Studente gli venga passata anche l immaggine ecco il codice del metodo che salva lo studente.
studentRepository è solo un interfaccia vuota che estende JpaRepository.

@Service
public class StudentServiceImpl implements StudentService{

	private StudentRepository studentRepository;
	
	public StudentServiceImpl(StudentRepository studentRepository) {
		super();
		this.studentRepository = studentRepository;
	}

	@Override
	public List<Student> getAllStudents() {
		return studentRepository.findAll();
	}

	@Override
	public Student saveStudent(Student student) {
		return studentRepository.save(student);
	}
il metodo viene infine chiamato dal controller che contiene questo codice e i relativi metodi

@Controller
public class StudentController {
	
private StudentService studentService;

public StudentController(StudentService studentService) {
	super();
	this.studentService = studentService;
}

@GetMapping("/students") //students fa riferimento un una pagina front end mappata con /students 
//questo metodo ritorna la parte front end
public String listStudents(Model model) {
	model.addAttribute("students",studentService.getAllStudents());
	return "students";
}

@GetMapping("/students/new")
public String createStudentFormModel(Model model) {
	Student student = new Student();
	model.addAttribute("student",student);
	return "create_student";
}

@PostMapping("/students")
public String saveStudent(@ModelAttribute("student") Student student) {
	studentService.saveStudent(student);
	return "redirect:/students";
}

@GetMapping("/students/edit/{id}")
public String editStudent(@PathVariable Long id, Model model) {
	model.addAttribute("student", studentService.getStudentById(id));
	return "edit_student";
}

@PostMapping("/students/{id}")
public String updateStudent(@PathVariable Long id,
		@ModelAttribute("student") Student student,
		Model model) {
	
	// get student from database by id
	Student existingStudent = studentService.getStudentById(id);
	existingStudent.setId(id);
	existingStudent.setFirstName(student.getFirstName());
	existingStudent.setLastName(student.getLastName());
	existingStudent.setEmail(student.getEmail());
	
	// save updated student object
	studentService.updateStudent(existingStudent);
	return "redirect:/students";		
}

@GetMapping("/students/{id}")
public String deleteStudent(@PathVariable Long id) {
	studentService.deleteStudentById(id);
	return "redirect:/students";
}

}

5 Risposte

  • Re: Inserire immaggine nel database con springboot

    Dipende tutto da come deve essere memorizzata l'immagine.
    Mi vengono in mente 3 diversi modi per farlo:

    1) L'immagine è memorizzata all'interno di una cartella nota (o, quantomento, accessibile) all'applicazione: in questo caso ti basterà aggiungere un campo di testo che servirà ad ospitare il percorso (completo o relativo) all'immagine;

    2) L'immagine è hostata online da qualche parte: in questo caso ti basterà aggiungere un campo di testo che servirà a contenere la URL dell'immagine;

    3) L'immagine è fisicamente memorizzata all'interno di un campo apposito nella tabella dello studente: in questo caso avrai un campo di tipo BLOB che conterrà i byte dell'immagine.

    Ecco come diventerà la tua entity:
    
    // Caso 1 e 2
    @Column(name = "immagine", length=2048)
    private String immagine;
    
    // Caso 3
    @Basic(fetch = FetchType.LAZY)
    @Lob
    @Column(name = "immagine")
    private byte[] immagine;
    
    Il resto dei metodi vanno già bene così.
  • Re: Inserire immaggine nel database con springboot

    Grazie mille informandomi ho notato che molti nel metodo per salvare un immaggine utilizzano Multipartfile è necessario aggiungerlo come parametro insieme al Model oppure no ?
    Facendo riferimento al caso 3 ovvero aggiungendo il file di tipo blob
  • Re: Inserire immaggine nel database con springboot

    lorenzodev21 ha scritto:


    Multipartfile è necessario aggiungerlo come parametro insieme al Model oppure no ?
    Sì, il MultipartFile serve nel metodo del Controller per riceve l'upload di un file.

    Se hai un <input type="file" name="userPicture" ....ecc.... >

    Allora nel metodo metti come parametro:

    @RequestParam("userPicture") MultipartFile userPictureFile
  • Re: Inserire immaggine nel database con springboot

    Si si perfetto grazie
  • Re: Inserire immaggine nel database con springboot

    Solo per la precisione ... immagine con una g ... ... così magari entra meglio nel db ...
Devi accedere o registrarti per scrivere nel forum
5 risposte