Controller

FileUploadController.java

package kr.or.ddit.controller.file.item01;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

import javax.annotation.Resource;
import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;

import kr.or.ddit.controller.file.item01.service.ItemService;
import kr.or.ddit.vo.Item;
import lombok.extern.slf4j.Slf4j;

@Controller
@RequestMapping("/item")
@Slf4j
public class FileUploadController01 {
/*
 * 	- 파일 업로드 등록 기능 컨트롤러 메소드 만들기 (itemRegister:post)
 * 	- 파일 업로드 등록 기능 서비스 인터페이스 메소드 만들기
 * 	- 파일 업로드 등록 기능 서비스 클래스 메소드 만들기
 * 	- 파일 업로드 등록 기능 Mapper 인터페이스 메소드 만들기
 * 	- 파일 업로드 등록 기능 Mapper xml 쿼리 만들기
 * 	- 파일 업로드 등록 완료 페이지 만들기.
 *  - 여기까지 확인 
 */
	
	// root-context.xml 에서 설정한 uploadPath 빈등록 path 경로를 사용한다.(value로 설정했던 값)
	@Resource(name="uploadPath")
	private String resourcesPath;
//	private String uploadPath = "C://upload";
	
	@Inject
	private ItemService itemService;
	
	**// 등록 페이지로 가는 메소드**
	@RequestMapping(value="/register", method = RequestMethod.GET)
	public String itemRegisterForm() {
		return "item/register";
	}
	
	**// 파일 등록을 진행하는 메소드**
	@RequestMapping(value="/register", method = RequestMethod.POST)
	public String itemRegister(Item item, Model model) throws IOException {
		MultipartFile file = item.getPicture();
		
		log.info("originalName : " + file.getOriginalFilename());
		log.info("size : " + file.getSize());
		log.info("contentType : " + file.getContentType());
		
		**// 넘겨받은 파일을 이용하여 파일 업로드(복사)를 진행한다.
		// return : UUID + "_" _ 원본 파일명**
		String createdFileName = uploadFile(file.getOriginalFilename(), file.getBytes());
		item.setPictureUrl(createdFileName);
		itemService.register(item);
		model.addAttribute("msg", "등록이 완료되었습니다");
		return "item/success";
	}
	
	**// 업로드할 파일 생성**
	private String uploadFile(String originalName, byte[] fileData) throws IOException {
		System.out.println("resourcesPath : " + resourcesPath);
		UUID uuid = UUID.randomUUID(); // UUID 파일명 생성 준비
		String createdFileName = uuid.toString() + "_" + originalName; //UUID + "_" + 원본파일명
		
		File file = new File(resourcesPath);
		if(!file.exists()) {
			file.mkdirs();
		}
		
		File target = new File(resourcesPath, createdFileName);
		FileCopyUtils.copy(fileData, target); // 파일 복사
		return createdFileName;
	}
}

Service

package kr.or.ddit.controller.file.item01.service;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import kr.or.ddit.vo.Item;

@Service
public class ItemServiceImpl implements ItemService {
	
	@Inject
	private ItemMapper mapper;
	
**// 파일 등록하는 서비스**
	@Override
	public void register(Item item) {
		mapper.create(item);
	}

}

Mapper

package kr.or.ddit.mapper;

import kr.or.ddit.vo.Item;

public interface ItemMapper {
	public void create(Item item);
}

Mapper(SQL)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "<https://mybatis.org/dtd/mybatis-3-mapper.dtd>">
 <mapper namespace="kr.or.ddit.mapper.ItemMapper">
 
 **<!-- 파일 등록하는 쿼리 -->**
 	<insert id="create" parameterType="item">
 		insert into item(
 			item_id, item_name, price, description, picture_url
 		) values (
 			seq_item.nextval, #{itemName}, #{price}, #{description}, #{pictureUrl}
 		)
 	</insert>
 </mapper>

JSP 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>Register</h2>
	<form method="post" action="/item/register" enctype="multipart/form-data">
		<table>
			<tr>
				<td>상품명</td>
				<td>
					<input type="text" name="itemName" id="itemName">
				</td>
			</tr>
			<tr>
				<td>가격</td>
				<td>
					<input type="text" name="price" id="price">
				</td>
			</tr>
			<tr>
				<td>파일</td>
				<td>
					<input type="file" name="picture" id="picture">
				</td>
			</tr>
			<tr>
				<td>개요</td>
				<td>
					<textarea rows="10" cols="20" name="description"></textarea>
				</td>
			</tr>
		</table>
		<div>
			<button type="submit" id="btnRegister">Register</button>
			<button type="button" id="btnList" onclick="javascript:location.href='/item/list'">List</button>
		</div>
	</form>
</body>
<script type="text/javascript">
</script>
</html>

등록 페이지로 넘어갔을 때 화면이다.

Untitled

내용을 작성하고 파일을 선택 후 등록 버튼을 누르면 DB에 잘 저장된 것을 볼 수 있다.

Untitled

Untitled