[Spring] To Do List 웹페이지 만들기(spring legacy) - 3. 일기장(diary)_파일 업로드

HodooHa·2024년 6월 26일
post-thumbnail

다음은 [일기장] 메뉴이다.

"일기쓰기" 버튼을 누르면 하기와 같이 제목, 일기 내용, 이미지 파일 첨부를 할 수 있는 화면으로 간다.

일기를 한번 써보았다.
세상에서 제일 사랑스러운 우리 호두에 대해 글을 쓰고 호두 사진을 올렸다.



소스코드

[DiaryController.java 일부]

@SessionAttributes("loginUser")
@Controller
@RequestMapping("/diary")
public class DiaryController {

	private DiaryService diaryService;

	@Autowired
	public DiaryController(DiaryService diaryService) {
		super();
		this.diaryService = diaryService;
	}

	@GetMapping("/insert")
	public String insertfrom() {
		return "diary/insertform";
	}

	@PostMapping("/insert")
	public String insertDiary(DiaryDTO diaryDTO, HttpServletRequest request, MultipartFile imgFile, Model model,
			HttpSession session) {

		System.out.println("imgFile : " + imgFile);
		System.out.println("diaryDTO : " + diaryDTO);
		String page = "";

		/* 파일을 저장할 경로 설정 */
		String root = request.getSession().getServletContext().getRealPath("resources");

		System.out.println("root : " + root);

		String filePath = root + "\\uploadFiles";

		File mkdir = new File(filePath);
		if (!mkdir.exists()) {
			mkdir.mkdirs();
		}

		/* 파일명 변경 처리 */
		String savedName = null;
		if (!imgFile.isEmpty()) {
			String originFileName = imgFile.getOriginalFilename();
			String ext = originFileName.substring(originFileName.lastIndexOf("."));
			savedName = UUID.randomUUID().toString().replace("-", "") + ext;
		}

		/* 파일을 저장한다. */
		try {
			if (!imgFile.isEmpty()) {
				imgFile.transferTo(new File(filePath + "\\" + savedName));
			}

			UserDTO loginUser = (UserDTO) session.getAttribute("loginUser");

			diaryDTO.setImg(savedName);
			diaryDTO.setUserId(loginUser.getUserId());

			int result = diaryService.insertDiary(diaryDTO);

			if (result > 0) {
				page = "redirect:/diary/list?page=1";
			} else {
				page = "common/errorPage";
				model.addAttribute("msg", "일기 작성 실패");
			}

		} catch (Exception e) {
			e.printStackTrace();
			/* 실패시 파일 삭제 */
			new File(filePath + "\\" + savedName).delete();
			page = "common/errorPage";
			model.addAttribute("msg", "일기 작성 실패");
		}

		return page;
	}

[DiaryServiceImpl.java 일부]

import java.util.ArrayList;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.multi.hodooScheduler.diary.model.dao.DiaryDAO;
import com.multi.hodooScheduler.diary.model.dto.DiaryDTO;
import com.multi.hodooScheduler.diary.model.dto.PageDTO;

@Service
public class DiaryServiceImpl implements DiaryService {

	private DiaryDAO diaryDAO;
	private SqlSessionTemplate sqlSession;

	@Autowired
	public DiaryServiceImpl(DiaryDAO diaryDAO, SqlSessionTemplate sqlSession) {
		super();
		this.diaryDAO = diaryDAO;
		this.sqlSession = sqlSession;
	}

	@Override
	public int insertDiary(DiaryDTO diaryDTO) throws Exception {

		int result = diaryDAO.insertDiary(sqlSession, diaryDTO);

		return result;
	}
}

[DiaryDAO.java 일부]

import java.util.ArrayList;

@Repository
public class DiaryDAO {

	public int insertDiary(SqlSessionTemplate sqlSession, DiaryDTO diaryDTO) {

		return sqlSession.insert("diaryMapper.insertDiary", diaryDTO);

	}
}

[DiaryDTO.java]

import java.sql.Date;

public class DiaryDTO {

	private int rownum;
	private int dno;
	private String userId;
	private String title;
	private String content;
	private String img;
	private Date createdDate;

	
	public DiaryDTO() {
	}
	
	public int getDno() {
		return dno;
	}

	public void setDno(int dno) {
		this.dno = dno;
	}

	public int getRownum() {
		return rownum;
	}

	public void setRownum(int rownum) {
		this.rownum = rownum;
	}
	
	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getImg() {
		return img;
	}

	public void setImg(String img) {
		this.img = img;
	}

	public Date getCreatedDate() {
		return createdDate;
	}

	public void setCreatedDate(Date createdDate) {
		this.createdDate = createdDate;
	}

	@Override
	public String toString() {
		return "DiaryDTO [rownum=" + rownum + ", dno=" + dno + ", userId=" + userId + ", title=" + title + ", content="
				+ content + ", img=" + img + ", createdDate=" + createdDate + "]";
	}



	

}

[DiaryMapper.xml 일부]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="diaryMapper">
	<resultMap type="diaryDTO" id="diaryResultSet">
		<!-- 언더바가 들어가는 쿼리문에 한하여 매핑을 해줘야함 -->
		<result property="dno" column="dno" />
		<result property="userId" column="user_id" />
		<result property="title" column="title" />
		<result property="content" column="content" />
		<result property="img" column="img" />
		<result property="createdDate" column="create_date" />
		<!-- <result property="rownum" column="rownum" /> -->
	</resultMap>

	<insert id="insertDiary" parameterType="diaryDTO">
		INSERT INTO
		DIARY
		(user_id, title, content, img)
		VALUES (#{userId}, #{title},
		#{content},
		#{img})
	</insert>
<mapper>

다이어리 조회 및 페이지 이동은 다음 포스팅에 쓰겠다!
특히 페이지네이션... 언제 해도 복잡한 것 같다ㅠㅠ

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

profile
성장하는 개발자, 하지은입니다.

0개의 댓글