Day76 :) 파일업로드

Nux·2022년 1월 6일
0

자바웹개발

목록 보기
90/105
post-thumbnail
post-custom-banner

Spring 파일 업로드 기능 구현하기

pom.xml

  • 파일 업로드를 지원하는 라이브러리를 의존성 추가
<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.4</version>
</dependency>

context-web.xml(빈 등록)

multipartresolver

  • 스프링에서 제공하는 파일 업로드를 위한 객체
  • 페이지에 첨부파일 선택 필드가 있으면 파일을 실제로 첨부하지 않아도 자동 생성됨
  • 첨부파일 유무, 파일명, 컨텐츠타입(png, img 등), 파일 사이즈, 임시파일 스트림 등 API 제공
<bean id="multipartResolver" 
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="UTF-8" />
</bean>

VO

  • 파일 업로드 관련 vo 파일 생성
public class BookPicture {

	private int bookNo;
	private String picture;
	
	public BookPicture() {}

	public int getBookNo() {
		return bookNo;
	}

	public void setBookNo(int bookNo) {
		this.bookNo = bookNo;
	}

	public String getPicture() {
		return picture;
	}

	public void setPicture(String picture) {
		this.picture = picture;
	}

form

  • 정보(파일+제품정보) 업로드 관련 java파일
  • 2개 이상의 첨부파일 업로드 시 배열이나 컬렉션타입의 변수 선언
  • 타입은 MultipartFile 사용
private List<MultipartFile> upfiles;

public List<MultipartFile> getUpfiles() {
	return upfiles;
}
public void setUpfiles(List<MultipartFile> upfiles) {
	this.upfiles = upfiles;
}

Controller

  • 업로드 된 파일을 저장할 경로(변경가능)
@PostMapping("/insert.do")
public String save(BookInsertForm form) throws IOException {
	// 저장경로 설정
	String saveDirectory = "C:\\spring-workspace\\src\\main\\webapp\\resources\\images";
	
   	 // vo타입의 배열 생성
	List<BookPicture> bookPictures = new ArrayList<BookPicture>();
	
   	 // getUpfiles: form에서 정의한 파일 업로드 관련 메서드
	List<MultipartFile> upfiles = form.getUpfiles();
	for (MultipartFile multipartFile : upfiles) {
    		// 첨부파일이 비어있지 않을때 실행
		if (!multipartFile.isEmpty()) {	
        		// 첨부파일 이름 조회
			String filename = multipartFile.getOriginalFilename();
				
                	// 생성해 두었던 VO 객체 생성해서 첨부파일 이름 set
			BookPicture bookPicture = new BookPicture();
			bookPicture.setPicture(filename);
            
            		// 생성한 vo 객체를 List객체에 저장
			bookPictures.add(bookPicture);
				
                	// 임시 파일로 저장된 첨부파일을 읽어와 in에 저장
			InputStream in = multipartFile.getInputStream();
                	// 지정된 경로에 파일 저장
			FileOutputStream out = new FileOutputStream(new File(saveDirectory, filename));
			
            		// String이 제공하는 FileCopyUtils 메서드를 이용해 in을 out에 copy
			FileCopyUtils.copy(in, out);
		}
	}
    
    	// 제품VO 객체 생성
	Book book = new Book();
	
    	// 매개변수로 저장되어 있는 값을 Book객체의 멤버변수에 복사
	BeanUtils.copyProperties(form, book);
		
	// 책정보와 책사진정보를 서비스메소드에 전달해서 저장
	bookService.addNewBook(book, bookPictures);		

	return "redirect:list.do";
}
post-custom-banner

0개의 댓글