이미지를 DB에 저장하고 DB에서 불러와 화면에 출력해주는 이미지 업로드 프로그램입니다.
소스는 분할하여 첨부파일로 올립니다.
DB:
blob타입으로 이미지 파일을 DB에 저장한다.
CREATE TABLE Image_Upload (
num int(11) NOT NULL AUTO_INCREMENT,
title varchar(200),
description text ,
content mediumblob,
contentName varchar(200) ,
contentType varchar(255) ,
date timestamp DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (num)
);
컨트롤러 :
DB에 이미지를 저장하고 불러들여오는 부분
@RequestMapping(value = "/imageAdd.do", method = RequestMethod.POST)
public String imageAdd(@ModelAttribute("board") @Valid UploadImageVO upload, BindingResult result, Model model, @RequestParam("file") MultipartFile file) throws IOException {
logger.info("Add!! "+ new Date());
inputStream = file.getInputStream();
image = IOUtils.toByteArray(inputStream);
upload.setContent(image);
upload.setContentName(file.getOriginalFilename());
upload.setContentType(file.getContentType());
iuploadImageService.uploadWrite(upload);
return "redirect:/imageList.do";
}
@RequestMapping(value = "/imageShow/{num}.do", method = {RequestMethod.GET})
public void imageShow(@PathVariable("num") String num, HttpServletResponse response) throws IOException, SerialException, SQLException {
logger.info("Show!!"+ new Date());
UploadImageVO board = iuploadImageService.uploadView(num);
response.setHeader("Content-Disposition", "inline;filename=\"" + board.getContentName() + "\"");
outputStream = response.getOutputStream();
response.setContentType(board.getContentType());
SerialBlob blob = new SerialBlob(board.getContent());
IOUtils.copy(blob.getBinaryStream(), outputStream);
outputStream.flush();
outputStream.close();
}
JSP:
이미지 주소를 서블렛으로 DB에서 이미지 파일을 불러와서 화면에 보여준다.
<img width="500" height="300" src="imageShow/${board.num}.do"/>
리스트 화면:
글쓰기 화면:
뷰 화면:
수정화면: