우선 첫번째 전제로 페이지 폼 태그에서


<form action="insert.me" method="POST" enctype="multipart/form-data">

<input type="file" name="photo">

</form>


과 같이 enctype="multipart/form-data"으로 데이터를 전송해야 한다.






두번째 전제로 라이브러리 다운로드


업로드 관련 라이브러리를 pom.xml에 추가하자( https://qdgbjsdnb.tistory.com/237 )




세번째 전제로 업로드 관련 서블릿 xml 설정들


    <!-- 파일 업로드를 하기 위해 bean 등록 -->
    <beans:bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
        <beans:property name="maxUploadSize" value="10000000"></beans:property>
    </beans:bean>


용량 10MB 이하만 등록가능 하기 때문에 10MB보다 조금 적게 max를 설정








구현


    @RequestMapping("insert.me")
    public String insertMember(Member m, Model model, HttpServletRequest request, @RequestParam(value = "photo", required = false) MultipartFile photo) {
        System.out.println("Member : " + m);
        System.out.println("photo : " + photo);
       
        String root = request.getSession().getServletContext().getRealPath("resources");
       
        String filePath = root + "\\uploadFiles";
       
        // 파일명 변경
        String originFileName = photo.getOriginalFilename();
        String ext = originFileName.substring(originFileName.lastIndexOf("."));
        String changeName = CommonUtils.getRandomString();
       
        try {
            photo.transferTo(new File(filePath + "\\" + changeName + ext));
           
            ms.insertMember(m);
           
            return "redirect:goMain.me";
           
        } catch (Exception e) {
            new File(filePath + "\\" + changeName + ext).delete();
           
            model.addAttribute("msg", "회원가입 실패!");
            return "common/errorPage";
        }
    }




주목할 부분은 빨간색 글씨로 입력


ext는 기존의 파일의 확장자를 따옵니다.


DB의 중복을 피하기위해 랜덤 String을 생성해 이름을 변경


photo.transferTo(new File(filePath + "\\" + changeName + ext)); 를 통해 저장


만약 DB 등록에 실패하면 new File(filePath + "\\" + changeName + ext).delete();로 저장된 파일 삭제






+ Recent posts