더북(TheBook)

5. 도서 이미지를 등록하려면 BookController 컨트롤러에 submitAddNewBook()initBinder() 메서드를 수정해야 합니다.

코드 9-7 BookController.java

package com.springmvc.controller;
...
import java.io.File;
import org.springframework.web.multipart.MultipartFile;

@Controller
@RequestMapping("/books")
public class BookController {
    ...
    @GetMapping("/add")
    public String requestAddBookForm(@ModelAttribute("NewBook") Book book) {
        return "addBook";
    }

    @PostMapping("/add")
    public String submitAddNewBook(@ModelAttribute("NewBook") Book book) {
        MultipartFile bookImage = book.getBookImage(); 

        String saveName = bookImage.getOriginalFilename(); 
        File saveFile = new File("C:\\upload", saveName);   
      
        if (bookImage != null && !bookImage.isEmpty()) {
            try {
                bookImage.transferTo(saveFile); 
            } catch (Exception e) {
                throw new RuntimeException("도서 이미지 업로드가 실패하였습니다", e);
            }
        }

        bookService.setNewBook(book);
        return "redirect:/books";
    }
  
    @ModelAttribute 
    public void addAttributes(Model model) { 
        model.addAttribute("addTitle", "신규 도서 등록");
    }

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.setAllowedFields("bookId", "name", "unitPrice", "author", "description", "publisher", "category", "unitsInStock", "totalPages", "releaseDate", "condition", "bookImage"); 
    }
}

신규 도서 등록 페이지에서 커맨드 객체의 매개변수 중 도서 이미지에 해당하는 매개변수를 MultipartFile 객체의 bookImage 변수로 전달합니다.

MultipartFile 타입으로 전송받은 이미지 파일 이름을 얻습니다.

도서 이미지 파일을 C:\upload 경로로 업로드합니다.

<form:input> 태그의 file 타입에서 name 속성 이름 bookImage에 바인딩되도록 bookImage를 추가로 설정합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.