728x90
SpringBoot · intelliJ · OracleDB · Thymeleaf
1. Question 엔티티에 column 추가하기
Question.java
private String filepath;/*파일저장경로*/
private String filename;/*파일이름*/
2.QuestionService에서 create 메서드 수정하기
public void create(String subject, String content, SiteUser user, String category,
MultipartFile file) throws Exception{
String projectPath = System.getProperty("user.dir") + "\\\\src\\\\main\\\\resources\\\\static\\\\files";
UUID uuid = UUID.randomUUID();
String fileName = uuid + "_" + file.getOriginalFilename();
File saveFile = new File(projectPath, fileName);
file.transferTo(saveFile);
Question q = new Question();
q.setSubject(subject);
q.setContent(content);
q.setCreateDate(new Date());
q.setAuthor(user);
q.setCategory(category);
q.setFilename(fileName);
q.setFilepath("/files/" + fileName);
this.questionRepository.save(q);
}
MultipartFile file 추가 + 예외처리
public void create(String subject, String content, SiteUser user, String category, MultipartFile file) throws Exception{
우리의 프로젝트경로를 담아주게 된다 - 저장할 경로를 지정
String projectPath = System.getProperty("user.dir") +"\\\\src\\\\main\\\\resources\\\\static\\\\files";
식별자 . 랜덤으로 이름 만들어줌
UUID uuid = UUID.randomUUID();
저장될 파일이름 지정 = 랜덤식별자_원래파일이름
String fileName = uuid +"_"+ file.getOriginalFilename();
빈 껍데기 생성 - File을 생성할건데, 이름은 "fileName" 으로할거고, projectPath 라는 경로에 담긴다는 뜻
File saveFile = newFile(projectPath, fileName);
file.transferTo(saveFile);
파일 넣기
q.setFilename(fileName);
저장되는 경로-저장된파일의이름,저장된파일의경로
q.setFilepath("/files/" + fileName);
파일 저장
this.questionRepository.save(q);
3.QuestionController에서 MultipartFile 추가와 예외처리해주기
@PreAuthorize("isAuthenticated()")
@PostMapping("/create")
public String questionCreate(@Valid QuestionForm questionForm,
BindingResult bindingResult,
Principal principal,
MultipartFile file) throws Exception{
if (bindingResult.hasErrors()) {
return "question_form";
}
SiteUser siteUser = this.userService.getUser(principal.getName());
this.questionService.create(questionForm.getSubject(), questionForm.getContent(), siteUser, questionForm.getCategory(), file);
return "redirect:/question/list";
}
4.html 파일 수정해주기
question_form.html
<!--파일 업로드 : enctype="multipart/form-data 추가-->
<form th:object="${questionForm}" method="post" enctype="multipart/form-data">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<!--파일업로드버튼-->
<input type="file" name="file">
question_detail.html
<!--파일업로드-->
<img th:src="@{${question.filepath}}">
개선할점 : 이미지파일 html 한번 저장해야 동기화가 됨
다음글에서 개선하였습니다!
728x90
'Follow Work > SpringbootBoard' 카테고리의 다른 글
[HTML CSS JS] 자동 이미지 슬라이더 만들기 (0) | 2022.09.05 |
---|---|
[HTML CSS] 플립 카드 만들기 (0) | 2022.09.05 |
[Springboot] 회원 정보 수정하기(닉네임,이메일) [36] (0) | 2022.09.05 |
[API] 네이버지도 API에 현재 위치 표시 [35] (0) | 2022.09.05 |
[API] 네이버지도 API 추가 [34] (0) | 2022.09.05 |