MultipartFile -> 이미지 업로드에 핵심이다.

이미지 업로드 활용하는 DTO에 멤버변수로 MultipartFile 타입을 추가할 수 있다.

Spring 에서 지원해주고 있으며 pom.xml 의존주입은 아래와 같이 진행된다.

더보기
<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.3.1</version>
</dependency>

의존 주입을 완료했다면 스프링 컨테이너에 Bean 추가를 진행해주면된다.

<bean class="org.springframework.web.multipart.support.StandardServletMultipartResolver" id="multipartResolver" />

 

 

추가하게 되면 아래 예제 처럼 사용이 가능하며

MutipartFile 에서 주로? 사용하는 메서드는 아래와 같다.

getOrifinalFilename() : 받아온 파일의 파일 이름만 가져옵니다.

transferTo() : 입력한 주소에 받아온 파일을 복사?해서 저장합니다.

 

간단한 예제

update.jsp

더보기
<div class="container mt-5">
            <div class="card">
                <div class="card-body">
                    <h5 class="card-title">이미지 변경</h5>
                    <form action="updateImage.do" method="POST" enctype="multipart/form-data">
                        <input type="hidden" name="board_num" value="${data.board_num}">

                        <div class="mb-3">
                            <label for="file" class="form-label">이미지</label>
                            <input type="file" class="form-control" name="file" id="file" onchange="preview(event)">
                        </div>

                        <div class="mb-3">
                            <img id="previewImage" class="img-thumbnail" style="display:none; max-width: 100%; height: auto;" alt="미리보기 이미지">
                        </div>

                        <div class="d-grid">
                            <input type="submit" class="btn btn-primary" value="이미지 변경">
                        </div>
                    </form>
                </div>
            </div>
        </div>

 

updateImage.do

더보기
	@PostMapping("/updateImage.do")
	public String updateImage(ImgDTO imgDTO) throws IOException {
		log.info("imgDTO : [{}]",imgDTO);
		MultipartFile file = imgDTO.getFile();
		String filename = file.getOriginalFilename();
		log.info("filename [{}]",filename);
		file.transferTo(new File(path + filename));
		imgDTO.setPath(filename);
		if(imgService.insert(imgDTO)) {
			log.error("이미지 등록 성공");
		}
		return "redirect:main.do";
	}

 

ImgDTO.java

더보기
public class ImgDTO {
    MultipartFile file;
    private int imaged;
    private String path;
    private int board_num;

    public int getImaged() {
        return imaged;
    }

    public void setImaged(int imaged) {
        this.imaged = imaged;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public int getBoard_num() {
        return board_num;
    }

    public void setBoard_num(int board_num) {
        this.board_num = board_num;
    }

    public MultipartFile getFile() {
        return file;
    }

    public void setFile(MultipartFile file) {
        this.file = file;
    }

    @Override
    public String toString() {
        return "ImgDTO{" +
                "imaged=" + imaged +
                ", path='" + path + '\'' +
                ", board_num=" + board_num +
                '}';
    }
}
728x90
개발자가 되고 싶은 곰