• 분류 전체보기 (132)
    • 공지사항 (2)
    • 블로그팁 (4)
    • GKSkin (5)
      • 소개 (1)
      • 스킨다운로드 (1)
      • 사용법 (3)
    • GKTool (4)
      • 소개 (1)
      • 시연영상 (3)
    • 코드저장소 (41)
      • javascript (2)
      • jQuery 플러그인 (7)
      • java (12)
      • sql (10)
      • mybatis(ibatis) (3)
      • 스마트에디터연동 (3)
      • 다음에디터연동 (2)
      • 샘플링답변 (2)
    • 웹개발강좌 (48)
      • jQuery (8)
      • jQueryUI (5)
      • ExtJS (28)
      • 부트스트랩 (7)
    • 모바일웹강좌 (1)
      • SenchaTouch (1)
    • 개발에필요한연동법 (27)
      • 스프링연동 (16)
      • 리눅스서버구축 (11)
댓글
/129
2014. 12. 21. 09:30
Spring3 MVC와 Mybatis를 이용하여 이미지를 blob타입으로 db 저장 및 출력해보기

이번포스팅은 이미지 파일을 통째로 DB의 BLOB형식의 컬럼에 등록을 해보는 방법과 

DB에 저장된 BLOB 형식의 데이터를 이미지태그에 출력해보도록 하겠습니다.


우선 BLOB 컬럼을 가진 테스트 테이블 하나를 생성해보도록 하겠습니다.

※ 본인은 MySQL에 BLOB타입의 컬럼을 가진 테이블을 생성해보도록 하겠습니다.



BLOB컬럼을 가진 테이블 생성


CREATE TABLE `img_table` (
  `img` longblob
) ENGINE=InnoDB DEFAULT CHARSET=utf8



BLOB 형식으로 생성 할수도 있지만 

사이즈제한이 있으므로 LONGBLOB 타입의 컬럼을 생성하였습니다.


이제는 Spring MVC와 Mybatis의 로직을 구현해보도록 하겠습니다.



Spring 및 Mybatis연동법은 개인이 사용하고 계신 연동법이 있으시면 상관없지만

 없으신 분들은 하단 포스팅을 참고하시면 되겠습니다.



2014/11/06 - [개발에필요한연동법/스프링연동] - STS 이클립스를 이용하여 UTF-8 인코딩 설정 및 Spring3 MVC 연동해보기


2014/11/06 - [개발에필요한연동법/스프링연동] - Spring3 한글깨짐 방지를 위한 UTF-8 인코딩 설정하기


2014/11/07 - [개발에필요한연동법/스프링연동] - Spring3 파일전송을 위한 multipartResolver 설정하기


2014/11/14 - [개발에필요한연동법/스프링연동] - Spring3 Maven을 이용하여 pom.xml에 oracle,mysql,mssql jdbc 라이브러리 등록하기


2014/11/14 - [개발에필요한연동법/스프링연동] - Spring3 + MyBatis 기본설정 + 연동테스트 후 쿼리로그 확인해보기





DB에 파일을 BLOB로 등록하기 위한 Contoller


@Autowired
private StudyDao dao;
	
/**
 * 파일태그를 위한 폼태그
 * @return
 */
@RequestMapping(value="/formFile")
public String formFile() {
	return "formFile";
}

/**
 * 파일처리 컨트롤러
 * @param vo
 * @return
 */
@RequestMapping(value="/saveImage")
public String saveImage(Vo vo) {
	try {
		Map<String, Object> hmap = new HashMap<String, Object>();
		hmap.put("img", vo.getImgFile().getBytes());
		dao.saveImage(hmap);	
	} catch (Exception e) {
		e.printStackTrace();
	}
	return "redirect:/formFile";
}


DB에 파일을 BLOB로 등록하기 위한 DAO


@Autowired
private SqlSession query;

public void saveImage(Map<String, Object> hmap) throws SQLException {
	query.insert("query.saveImage",hmap);
}


Mybatis INSERT 쿼리코드


<insert id="saveImage" parameterType="java.util.Map">
	INSERT INTO img_table VALUES(#{img})	
</insert>


MultipartFile을 받기위한 VO 클래스


public class Vo {
	private MultipartFile imgFile;

	public MultipartFile getImgFile() {
		return imgFile;
	}

	public void setImgFile(MultipartFile imgFile) {
		this.imgFile = imgFile;
	}
}


DB에 저장할 파일처리를 위한 뷰페이지(formFile.jsp)


<form action="/saveImage" enctype="multipart/form-data" method="post">
	<input type="file" name="imgFile" />
	<input type="submit" value="이미지저장"/>
</form>


실행결과는 다음과 같습니다.








저장결과 정상적으로 이미지바이트가 DB에 INSERT 되었습니다.





그렇다면 이제 저장된 바이트이미지를 SELECT문을 통하여 가져온 후 

IMG태그로 화면에 출력해보도록 하겠습니다.


IMG태그의 SRC는 바이트이미지를 DB로부터 SELECT하는 Controller


/**
 * 임의의 뷰페이지
 * @return
 */
@RequestMapping(value="/view")
public String view() {
	return "view";
}
	
/**
 * 이미지태그의 src 컨트롤러
 * @return
 */
@RequestMapping(value="/getByteImage")
public ResponseEntity<byte[]> getByteImage() {
	Map<String, Object> map = dao.getByteImage();
       byte[] imageContent = (byte[]) map.get("img");
       final HttpHeaders headers = new HttpHeaders();
       headers.setContentType(MediaType.IMAGE_PNG);
       return new ResponseEntity<byte[]>(imageContent, headers, HttpStatus.OK);
}


IMG태그의 SRC는 바이트이미지를 DB로부터 SELECT하는 DAO


public Map<String, Object> getByteImage() {
	return query.selectOne("query.getByteImage");
}


IMG태그의 SRC는 바이트이미지를 DB로부터 SELECT하는 Mybatis 쿼리XML


<select id="getByteImage" resultType="java.util.Map">
	SELECT img
	FROM img_table
</select>


임의의 뷰페이지(view.jsp) 


<!-- img태그의 src 경로는 byte이미지 가져오는 컨트롤러 호출(/getByteImage) -->
<img alt="" src="/getByteImage" />



위와같이 임의로 body태그내에 작성 후 /view 컨트롤러를 호출해보도록 하겠습니다.






호출결과 정상적으로 byte데이터를 DB로부터 가져와서 화면에 출력이 되었습니다.


필요하신분들이 계실거 같아 포스팅 해보았습니다 ^^


by 개발로짜


저작자표시 비영리 변경금지 (새창열림)

'개발에필요한연동법 > 스프링연동' 카테고리의 다른 글

Spring3 MVC + HttpClient를 이용하여 GET/POST/Multipart API 웹서버 구축해보기  (2) 2014.12.07
Spring3 spring-task를 이용하여 스케줄러 연동 및 동작시켜보기 + DB연동(MySQL기준)  (0) 2014.11.24
Spring3 + ibatis(아이바티스) 연동해보고 쿼리결과값 콘솔에 출력해보기  (5) 2014.11.17
Spring3 + Mybatis 여러개 Datasource 연동법(다중 트랜잭션 포함)  (0) 2014.11.16
Spring3 + Mybatis연동에 추가로 트랜잭션 설정 하여 실패시 Rollback 처리하기  (2) 2014.11.14

티스토리툴바