날아라쩡글이의 블로그입니다.

사진입력방법 본문

중앙 HTA (2106기) story/spring java framwork story

사진입력방법

날아라쩡글이 2022. 9. 17. 16:35
반응형

@PostMapping("/insert.do")
public String save(BookInsertForm form) throws IOException {
String saveDirectory = "C:\\spring-workspace\\spring-mybatis\\src\\main\\webapp\\resources\\images";
logger.debug("입력 폼 정보 :" + form);

List<BookPicture> bookPictures = new ArrayList<BookPicture>();

List<MultipartFile> upfiles = form.getUpfiles();//파일을 가져온다. 
//업로드된 첨부파일을 지정된 폴더에 저장하고, BookPicture객체를 생성해서 파일명을 저장하고, 생성된 BookPicture객체를 List객체에 저장한다. 
/*
 * MultipartFile
 *  - 첨부파일 업로드를 지원하는 객체다. 
 *  - 첨부파일 선택 필드 하나 당 MutipartFile객체가 하나씩 생성된다. 
 *  - 폼의 첨부 파일 선택 필드에서 첨부파일을 선택하지 않아도, 해당 필드에 대한 MultipartFile객체는 생성된다. 
 *  - MultipartFile의 주요 API
 *   + boolean isEmpty() 
 *  MultipartFile객체에 첨부파일이 포함되어 있지 않으면 true를 반환한다. 
 *   + String getOriginalFilename()
 *  업로드 된 첨부파일의 파일명을 반환한다. 
 *   + String getContentType()
 *  업로드 된 첨부파일의 컨텐츠 타입을 반환한다. (text/plain, text/html, img/png 등) 
 *   + long getSize()
 *  업로드 된 첨부파일의 파일사이즈를 반환한다.
 *   + InputStream getInputStream()
 *  업로드 된 첨부파일은 temp 폴더에 임시파일로 저장되는데, 그 임시파일의 내용을 읽어오는 스트림을 반환한다. 
 *   + byte[] getBytes()
 *  업로드 된 첨부파일의 실제 데이터를 byte배열을 담아서 반환한다. 
 * 
 */
for(MultipartFile multipartFile : upfiles) {
if(!multipartFile.isEmpty()) { //파일이 들어가지 않은 것이 걸려진다. 파일이 비어있지 않으면!!!!
//MultipartFile의 isEmpty()메소드는 해당 객체에 첨부파일 정보가 없으면 true를 반환한다. 
//MultipartFile객체에서 업로드된 첨부파일의 이름을 조회한다. System.currentTimeMillis() 13자리 : 유닉스시간으로 현재시간정보를 가져온다.ㄴ
String filename = System.currentTimeMillis() + System.currentTimeMillis() + multipartFile.getOriginalFilename();
//책의 사진정보를 저장하는 BookPicture객체를 생성하고, 첨부파일 이름을 저장한다. 
BookPicture bookPicture = new BookPicture();
bookPicture.setPicture(filename);
//생성된 BookPicture 객체를 List객체에 저장한다. 
bookPictures.add(bookPicture);

//업로드된 첨부파일을 프로젝트내의 images 폴더에 저장하기
//MultipartFile객체는 임시디렉토리에 임시파일상태로 저장된 첨부파일을 읽어오는 스트림을 제공한다. 
InputStream in = multipartFile.getInputStream(); //읽어오는 스트림
// 지정된 폴더에 첨부파일명으로 파일을 출력하는 스트림 생성하기
FileOutputStream out = new FileOutputStream(new File(saveDirectory, filename)); //출력하는 스트림

//스프링의 있는 객체로 저장한다. 저장하는 스트림이다.
//Spring에서 제공하는 FileCopyUtils.copy(InputStream in, OutputStream out)를 메소드를 사용해서 
//temp폴더에 임시파일로 저장되어 있는 첨부파일을 읽어서 scr/main/resources/images 폴더로 복사한다.
FileCopyUtils.copy(in, out);
}
}

Book book = new Book();
// BookInsertFrom객체의 멤버변수에 저장된 값을 Book객체의 멤버변수에 복사한다. 
// 멤버변수의 타입과 멤버변수의 이름이 일치하는 값이 복사되며, 이름은 같은데 타입이 서로 다르면 예외가 발생한다. 
BeanUtils.copyProperties(form, book);
//폼에 있는 모든 프라퍼티의 값을 전부 복사하고 보낸준다. 
///책정보와 책사진저옵를 서비스 메소드에 전달해서 저장시킨다. 
bookService.addNewBook(book, bookPictures);
return "redirect:list.do";

반응형
Comments