이번포스팅은 이미지 파일을 통째로 DB의 BLOB형식의 컬럼에 등록을 해보는 방법과
DB에 저장된 BLOB 형식의 데이터를 이미지태그에 출력해보도록 하겠습니다.
우선 BLOB 컬럼을 가진 테스트 테이블 하나를 생성해보도록 하겠습니다.
※ 본인은 MySQL에 BLOB타입의 컬럼을 가진 테이블을 생성해보도록 하겠습니다.
1 2 3 | 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 기본설정 + 연동테스트 후 쿼리로그 확인해보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | @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" ; } |
1 2 3 4 5 6 | @Autowired private SqlSession query; public void saveImage(Map<String, Object> hmap) throws SQLException { query.insert( "query.saveImage" ,hmap); } |
1 2 3 | < insert id = "saveImage" parameterType = "java.util.Map" > INSERT INTO img_table VALUES(#{img}) </ insert > |
1 2 3 4 5 6 7 8 9 10 11 | public class Vo { private MultipartFile imgFile; public MultipartFile getImgFile() { return imgFile; } public void setImgFile(MultipartFile imgFile) { this .imgFile = imgFile; } } |
1 2 3 4 | < form action = "/saveImage" enctype = "multipart/form-data" method = "post" > < input type = "file" name = "imgFile" /> < input type = "submit" value = "이미지저장" /> </ form > |
실행결과는 다음과 같습니다.
저장결과 정상적으로 이미지바이트가 DB에 INSERT 되었습니다.
그렇다면 이제 저장된 바이트이미지를 SELECT문을 통하여 가져온 후
IMG태그로 화면에 출력해보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /** * 임의의 뷰페이지 * @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); } |
1 2 3 | public Map<String, Object> getByteImage() { return query.selectOne( "query.getByteImage" ); } |
1 2 3 4 | < select id = "getByteImage" resultType = "java.util.Map" > SELECT img FROM img_table </ select > |
1 2 | <!-- 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 |