본문 바로가기
잡동/Spring

Spring Mysql Blob 저장 및 출력

by 죠부니 2018. 11. 2.
반응형

Blob 저장

 멀티파트폼을 통해서 파일을 받는다.


핵심

javax.sql.rowset.serial.SerialBlob


public String blobTest(@RequestParam("file") MultipartFile file) {

Map<String, Object> param = new HashMap<String, Object>();

//파일이름

String fileName = file.getOriginalFilename();

//

byte[] bytes;

try {

bytes = file.getBytes();

try {

Blob blob = new javax.sql.rowset.serial.SerialBlob(bytes);

logger.debug("length : "+blob.length());

param.put("file", blob);

param.put("file_name", fileName);

param.put("file_size", blob.length());

} catch (SerialException e1) {

e1.printStackTrace();

} catch (SQLException e1) {

e1.printStackTrace();

}

} catch (IOException e2) {

e2.printStackTrace();

}


//디비저장

MYSQL에 컬럼을 blob이나 자신의 타입에 맞는 자료형설정

http://naitas.tistory.com/entry/TINYBLOB-BLOB-MEDIUMBLOB-and-LONGBLOB-%EC%9E%90%EB%A3%8C%ED%98%95

}


//디비 테이블정보

file mediumblob 0

file_size bigint         20

file_name varchar 255


//테스트내용 저장 결과의 일부분

(BLOB) 8.40 KB 8600 d462084f-745a-4be0-ad1b-47693b9785dd.png

(BLOB) 8.82 KB 9036 4c6c1d5e-a9ee-45b4-9da4-b9e12bd2bf91.png


이미지 출력하기


List<Map<String, Object>> resultList = null;

List<String> paramList = new ArrayList<String>();

try {

//자신의 데이터 베이스에서 리스트정보를 가져온다.

resultList = blobService.BlobList();

objModel.addAttribute("resultList", resultList);

Iterator<Map<String, Object>> itr = resultList.iterator();

while (itr.hasNext()) {

    Map<String,Object> element = (Map<String, Object>) itr.next();

byte[] encoded=org.apache.commons.codec.binary.Base64.encodeBase64((byte[]) element.get("file"));

    String encodedString = new String(encoded);

    element.put("base64", encodedString);

    paramList.add(encodedString);

    logger.debug("FileInfo : " + encodedString);

    

    objModel.addAttribute("image",paramList);

    

}

} catch (Exception e) {

e.printStackTrace();

}


출력확인

이미지 출력

<br/>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<c:forEach var="list" items="${resultList}">

1 : ${list.file}<br/>

2 : ${list.file_size}<br/>

3 : ${list.file_name}<br/>

<hr/>

</c:forEach>


<c:forEach var="image" items="${image}">

<img src="data:image/png;base64,${image}">

</c:forEach>



반응형