-
Notifications
You must be signed in to change notification settings - Fork 0
2. Board Image Upload
minkyoung edited this page Mar 16, 2021
·
1 revision
기존 java 웹 프로젝트에서는 사용자가 DB에 직접 이미지를 저장x
form에 담은 @ModelAttribute 에서 이미지를 MultipartFile 타입으로 받은 후 byte[]로 바꿔서 BoardDTO에 저장해주고, 이것을 BoardDAO의 BoardMapper의 addBoard()를 통해 최종적으로 DB에 저장해준다.
- src/lifeShare/controller/BoardTemp.java
@RequestMapping(value = "/uploads")
public String uploadBoard(@ModelAttribute Board board, MultipartHttpServletRequest req, HttpServletRequest request) {
MultipartFile file = board.getImgFile();
HttpSession session = request.getSession();
Users user = (Users)session.getAttribute("loginOK");
String uid= user.getId();
if(uid==null)
return "redirect:/board";
else
board.setUid(uid); //uid 넣기
System.out.println(board);
byte[] img=null;
if (!file.getOriginalFilename().isEmpty()) {
try {
img = board.getImgFile().getBytes();
board.setImg(img);//이미지 넣기
} catch (Exception e) {
e.printStackTrace();
}
}
boardService.addBoard(board);
return "redirect:/board";
}MyBatis는 @Mapper 클래스로 지정된 메소드와 xml을 매핑시켜주어서 바로 DB의 조작을 가능케 한다. resultMap의 이미지를 jdbcType="BLOB"로 설정하면 mybatis가 byte[] 타입을 자동적으로 mysql의 BLOB 타입으로 저장해준다.
- resources/mybatis/mappers/BoardMapperTemp.xml
<resultMap id="boardMap" type="lifeShare.dto.Board">
<id column="IMG" property="img" jdbcType="BLOB"/>
</resultMap>
<update id="updateBoard" parameterType="map">
update BOARD set
TITLE=#{title},
STATE=#{state},
BTYPE=#{BTYPE},
CATEGORY=#{category},
LOC=#{loc},
LOC2=#{loc2},
CONTENT=#{content},
LIKES=#{likes},
IMG=#{img}
where BID=#{bid}
</update>cf) 참고로, 많은 searching 결과 업로드하는 사진을 직접 Database에 저장하는 일은 비효율적이기 때문에 이미지의 정보만을 저장하는 경우가 많다고 한다.