본문 바로가기
Back-End/Spring

Spring boot - 첨부파일이 있는 글 수정

by 호강하는 지해 2024. 1. 4.
728x90

 

첨부파일이 있는 글 수정은 다른 컬럼들처럼 value 값으로 불러올 수가 없어서 조금의 생각이 더 필요했다.

내가 2차 프로젝트에서 어떻게 해결했는지 적어보도록 하겠다.

 

 

// 알바게시판 수정
	@RequestMapping(value = "job_update", method = RequestMethod.POST)
	public String job_update(@RequestParam(name = "images") MultipartFile[] mf, int job_no, Job job, Member member, HttpServletRequest request,
			HttpSession session, Model model) throws Exception {
		
		for(MultipartFile MultipartFile : mf) {
			System.out.println("컨트롤러 받은 이미지: " + MultipartFile);
		}

		// 첨부파일 갯수가 3개 넘어갈 때
		if(mf.length > 3) {
			model.addAttribute("result", 1);
			return "goods/uploadResult";
		}
		
		// 이미지 업로드
		// goods 불러오면 확장자 뒤에 ,가 붙기 때문에 substring 써서 잘라주기
		String tmp_upload = goodsService.image_upload(mf, request);
		String upload_result = tmp_upload.substring(0, tmp_upload.length()-1);
		
		// 첨부파일 사이즈가 클 때
		if(upload_result.equals("FileSizeOver")) {
			model.addAttribute("result", 2);
			return "goods/uploadResult";
			
			// 파일 확장자가 다를 때
		}else if(upload_result.equals("FileNotMatch")) {
			model.addAttribute("result", 3);
			return "goods/uploadResult";
		}
		
		// 세션에 저장된 member_no을 job 객체 member_no에 저장
		job.setMember_no((int)session.getAttribute("member_no"));
		System.out.println("session에 저장된 member_no :" + job.getMember_no());
		
		Job original_job = jobService.get_all_job(job_no);
		// 첨부파일 수정 시
		if(upload_result.length() > 0) {
			job.setJob_image(upload_result);
			System.out.println("첨부파일 수정시 이미지 값: " + upload_result);
		// 첨부파일 미수정 시
		}else {
			job.setJob_image(original_job.getJob_image());
			System.out.println("미수정시 db에서 가져온 이미지 값: " + job.getJob_image());
		}
		
		int result = jobService.job_update(job);
		System.out.println("result: " + result);
		model.addAttribute("result", result);
		return "job/job_update_result";
	}

JobController.java

 

등록 폼에서 required를 써서 빈칸으로 냅두면 안 되도록 했지만 수정 폼에서는 required를 뺐다.

글 등록 때와는 달리 job_no을 매개변수로 DB에서 job 테이블의 모든 정보를 불러와 이미지 값을 사용하는 것이다.

 

upload_result의 길이가 0을 넘는다는 건 첨부파일을 첨부했다는 의미이므로 수정한다는 의미다.

그러므로 첨부파일 수정 시에는 사용자가 폼에서 등록한 값으로 update를 해주면 되고,

 

첨부파일 미수정 시에는 DB에서 가져온 이미지 값을 넣어서 update를 진행해주면 된다.

 

 

public int job_update(Job job) {
		return jobDao.job_update(job);
	}

JobService.java

 

 

int job_update(Job job);

JobDao.java

 

인터페이스인 dao는 따로 daoImpl를 거치지 않고, 바로 마이바티스와 매핑된다.

 

<!-- 글 수정 -->
<update id="job_update" parameterType="job">
	update job set
		job_title = #{job_title},
		job_content = #{job_content},
		job_price = #{job_price},
		job_place = #{job_place},
		job_time1 = #{job_time1},
		job_time2 = #{job_time2},
		job_day = #{job_day},
		job_image = #{job_image}
	where job_no = #{job_no}
</update>

job.xml

 

mysql의 update 쿼리문이다. 그럼 완성 !

728x90

'Back-End > Spring' 카테고리의 다른 글

HTTP 요청 메시지 - JSON  (0) 2024.01.18
HTTP 요청 파라미터 - @RequestParam, @ModelAttribute  (0) 2024.01.17
페이징과 리스트  (0) 2023.12.25
Spring - Spring MVC  (0) 2023.12.22