낙서장/Spring
Spring Image DataBase Insert
RunTimeException
2022. 2. 21. 16:55
이미지 저장할 컬럼 데이터 타입은 BLOB으로 설정한다.
JSP
<!-- 이미지 업로드 설정을 위해 form tag에 enctype="multipart/form-data" 추가 -->
<form action="${pageContext.request.contextPath}/imgUpload.do" method="post" enctype="multipart/form-data">
<input type="file" multiple="multiple" name="uploadImg">
<input type="submit" value="upload">
</form>
Controller
try {
String fileName = uploadImg.getOriginalFilename();
String extensions = fileName.substring(fileName.indexOf(".") + 1, fileName.length()).toLowerCase();
UploadVO vo = new UploadVO();
vo.setFileName(fileName);
vo.setImage(uploadImg.getBytes()); //byte[]로 저장
vo.setExtensions(extensions);
service.imgUpload(vo);
} catch (Exception e) {
e.printStackTrace();
}
Controller에서 VO 값 삽입 후 Service -> DAO -> Mapper -> DataBase로 순서로 삽입
DataBase Image Select 후 Web Page 출력작업
List<UploadVO> list = new ArrayList<UploadVO>();
List<Map<String, Object>> arr = null;
BufferedInputStream bis = null;
ByteArrayOutputStream bao = null;
byte[] buf = new byte[5 * 1024 * 1024];
try {
arr = dao.getImageList();
for (int index = 0; index < arr.size(); index++) {
UploadVO uvo = new UploadVO();
Map<String, Object> vo = arr.get(index);
Blob blob =(Blob) vo.get("IMAGE_BLOB");
uvo.setFileName(vo.get("FILE_NAME").toString());
uvo.setExtensions(vo.get("EXTENSIONS").toString());
bis = new BufferedInputStream(blob.getBinaryStream());
bao = new ByteArrayOutputStream();
int read = 0;
while((read = bis.read(buf, 0, buf.length)) != -1) {
bao.write(buf, 0 , read);
}
uvo.setImage_base64("data:image/"+uvo.getExtensions()+";base64,"+Base64.getEncoder().encodeToString(bao.toByteArray()));
list.add(uvo);
}
} finally {
if (bis != null)
bis.close();
if(bao != null)
bao.close();
}
Blob 타입으로 받은 이미지 데이터를 InputStream 형태로 변형하고 byte []로 만들기 위해 OutputStream에 값을 넣는다.
웹 페이지 이미지 출력은 base64 형태로 출력하기 때문에 인코딩 작업 후 변수에 저장한다.