Spring #7 - 이미지

김형우·2022년 3월 2일
0

Spring

목록 보기
8/19

1.entity 생성
2. 컨트롤러
3. DB
4. DBImpl

이미지 추가

1. Item.java - entity생성

  1. 이미지를 처리할 변수 생성
  2. 이미지 date는 byte 배열
// 이미지 추가
// byte 배열
private byte[] filedata = null;
private String filetype = null;
private String filename = null;
private Long filesize = 0L;

2. ItemController.java - GetMapping

  1. insertImg.jsp 호출명령

  2. 일단 사용자 입력 페이지가 나와야함

  3. 입력 후에 추가하는건 이후 일( 5. 에서 PostMapping)

// 127.0.0.1:8080/item/insertimg
@GetMapping(value = "/insertimg")
public String insertImgGET() {
	// item 폴더의 insert.jsp
    return "item/insertImg";
}

3. ItemDB.java - 설계도(interface)

  • Service
  1. Service 파일임을 명시
    : @Service

  2. (int) -1, 0, 1로 반환값 받음
    : public int insertImgItem(Item item);

4. ItemDBImpl.java - 구현부

  • Service
  • 여기서 하는 작업은 사실상 'item을 insert하고 int로 반환값을 준다' 밖에 없음
  • 디테일한 부분은 컨트롤러가 함
  1. Service 파일임을 명시
    : @Service

  2. 설계도를 불러옴
    : implements ItemDB

  3. implement 안된 메소드 자동으로 오버라이딩

  4. 새 시퀀스 사용
    : long code = sequenceService.generationSequence("SEQ_ITEM4_CODE");

  5. Item 타입의 item을 insert함
    : Item result = mongodb.insert(item);

@Override
public int insertImgItem(Item item) {
    try {
        long code = sequenceService.generationSequence("SEQ_ITEM4_CODE");
        // _id
        item.setCode(code);
        // 현재시간
        item.setRegdate(new Date());
        Item result = mongodb.insert(item);
        // System.out.println("result ===> " + result);
        if (result.getCode() == code) {
            return 1;
        }
        return 0;
    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    }
}

5. ItemController.java - PostMapping

  • POST 명령을 실행하기위한 부분
  1. insertimg.jsp 에서 post메소드로 받아왔기 때문에 POST로 맵핑함
    : @PostMapping(value = "/insertimg")

  2. insertimg.jsp 에서 임의의 name인 image로 이미지파일을 넘겼기 때문에 image로 받음
    : @RequestParam(name = "image") MultipartFile image,
    : 이미지의 타입은 MultipartFile

  3. MultipartFile 타입의 image에 item형태의, entity에서 설정한 변수를 전송받은 image에서 찾아서 추가함
    : item.setFiledata(image.getBytes());
    : item.setFilename(image.getOriginalFilename());
    : item.setFilesize(image.getSize());
    : item.setFiletype(image.getContentType());

  4. item에 들어있는 모든것을 추가(POST) 함
    : @ModelAttribute Item item)

  5. insertImgItem 수행 후 int로 리턴값을 받음
    : int ret = itemDB.insertImgItem(item);

// 127.0.0.1:8080/item/insertimg
@PostMapping(value = "/insertimg")
public String insertImgPOST(
        @RequestParam(name = "image") MultipartFile image,
        @ModelAttribute Item item) throws IOException {
    // System.out.println("item.toString() ===> " + item.toString());

    if (image.isEmpty() == false) { // 첨부됐을때
        // System.out.println("image첨부됨");
        item.setFiledata(image.getBytes());
        item.setFilename(image.getOriginalFilename());
        item.setFilesize(image.getSize());
        item.setFiletype(image.getContentType());
    }
    // System.out.println("item.toString() ===> " + item.toString());
    int ret = itemDB.insertImgItem(item);
    // System.out.println("ret ===> " + ret);
    if (ret == 1) {
        // GET으로 변경 127.0.0.1:8080/item/insertimg
        return "redirect:/item/seletlist";
    }
    return "redirect:/item/insertimg";
}

6. item/insertImg.jsp - View

  1. thymeleaf 사용 정의
    : <html lang="en" xmlns:th="http://www.thymeleaf.org">

  2. Bootstrap 사용 정의
    : <link rel="stylesheet" type="text/css" th:href="@{/css/bootstrap.css}" />
    : <script type="text/javascript" th:src="@{/js/bootstrap.min.js}"></script>

  3. form - submit으로 보낼때, 파일이 첨부되면 전송 타입을 설정해야한다.
    : <form th:action="@{/item/insertimg}" method="post" enctype="multipart/form-data">
    : 에서 enctype="multipart/form-data"

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" type="text/css" th:href="@{/css/bootstrap.css}" />
    <script type="text/javascript" th:src="@{/js/bootstrap.min.js}"></script>
    <title>InsertImg</title>
</head>
<body>
    <div class="style2">
        <div class="style1">
            <h3>item/insert.jsp</h3>
            ** 물품코드 등록일은 자동 생성
            <form th:action="@{/item/insertimg}" method="post" enctype="multipart/form-data">
                <div class="mb-3" style="width: 400px;">
                    <label class="lbl1">품명</label>
                    <input name="name" class="form-control form-control-sm" type="text" placeholder="품명" >
                </div>
                <div class="mb-3" style="width: 400px;">
                    <label class="lbl1">가격</label>
                    <input name="price" class="form-control form-control-sm" type="number" placeholder="가격" >
                </div>
                <div class="mb-3" style="width: 400px;">
                    <label class="lbl1">수량</label>
                    <input name="quantity" class="form-control form-control-sm" type="number" placeholder="수량" >
                </div>
                <div class="mb-3" style="width: 400px;">
                    <label style="width : 100px;display:inline-block;">아이디</label>
                    <input name="image" class="form-control form-control-sm" type="file" placeholder="아이디" >
                </div>                
                <input type="submit" class="btn btn-primary" value="회원가입">  
            </form>
        </div>
    </div>
</body>
</html>
<style>
.lbl1{
    width : 100px;
    display : inline-block;
} 
.style1 {
    border: 1px solid #cccccc;
    padding: 20px;
    width: 60%;  
}
.style2 {
    display: flex;
    justify-content: center;
}   
</style>
profile
The best

0개의 댓글