seeles
35
2019-06-21 20:33:25 작성 2019-06-21 20:38:37 수정됨
0
221

JSP 파일 업로드 오류 여쭤봅니다.


현재 파일 업로드에 관련되서 배우고 있는 학생인데, 오류를 해결하지 못해서  문의글을 적어봅니다.


 java.lang.IllegalArgumentException: Not a directory


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//판매상품 등록
    @Override
    public void productInsert(HttpServletRequest req, HttpServletResponse res) {
        
        // MultipartRequest 타입의 변수 선언
        MultipartRequest mr = null;
        
        
        // 업로드할 파일의 최대 사이즈(10 * 1024 * 1024 = 10MB)
        int maxSize = 10 * 1024 * 1024;
        
        // 임시 파일이 저장되는 논리적인 경로
        String saveDir = req.getRealPath("/image/product/");
        File isDir = new File(saveDir);
        if(!isDir.isDirectory()) {
            System.out.println("디렉토리가 없습니다.");
            isDir.mkdir();
        } 
        System.out.println(saveDir);
        
        // 업로드할 파일이 위치하게될 물리적인 경로
        String realDir = "/Users/spoat/worksapce/JSP_pj/WebContent/doghae/image";
        System.out.println(realDir);
        
        // 인코딩 타입 : 한글 파일명이 열화되는 것을 방지함
        String encType = "UTF-8";
        try {
        /*
        * DefaultFileRenamePolicy() 객체는 중복된 파일명이 있을 경우, 자동으로 파일명을 변경함
        * (예 : filename.png 가 이미 존재할 경우, filename1.png 과 같이)
        */
        mr = new MultipartRequest(req, saveDir, maxSize, encType, new DefaultFileRenamePolicy());
        System.out.println(mr);
    
        int pageNum = Integer.parseInt(mr.getParameter("pageNum"));
        
        FileInputStream fis = new FileInputStream(saveDir + mr.getFilesystemName("img"));
        FileOutputStream fos = new FileOutputStream(realDir + mr.getFilesystemName("img"));
        int data = 0;
        // 논리적인 경로에 저장된 임시 파일을 물리적인 경로로 복사함
        while((data = fis.read()) != -1) {
        fos.write(data);
        }
        fis.close();
        fos.close();
        /*
        * 위에서 MultipartRequest() 객체를 선언해서 받는 모든 request 객체들은
        * MultipartRequest 타입으로 참조돼야함
        * (예 : request.getParameter 에서 mr.getParameter)
        */
        
        //화면에서 입력받은 값을 그릇에 담아라 (req가 아니라 mr이다.)
        productVO vo = new productVO();
        
        vo.setId(mr.getParameter("id"));
        vo.setProduct(mr.getParameter("product"));
        vo.setP_name(mr.getParameter("p_name"));
        vo.setD_price(mr.getParameter("d_price"));
        vo.setPrice(Integer.parseInt(mr.getParameter("price")));
        vo.setBase(mr.getParameter("base"));
        vo.setCelling(mr.getParameter("celling"));
        vo.setCount(Integer.parseInt(mr.getParameter("count")));
        vo.setImg(mr.getFilesystemName("img"));
        
        //  다형성적용, 싱글톤 DB접근
        hostDAO dao = hostDAOImpl.getInstance();
        int cnt = dao.productInsert(vo);
        
        // request나 session에 처리 결과를 저장(jsp에 전달하기 위함)
        req.setAttribute("insertCnt", cnt);
        req.setAttribute("pageNum", pageNum);
        } catch (Exception e) {
        e.printStackTrace();
        }        
    }
cs


이렇게 코드를 적었는데 계속해서 업로드에 오류가 뜹니다.
경로도 복사해서 붙여넣었는데, mac이어서 그런지 \가 아니라 /, 슬래쉬로 넣어집니다..
그런데 cnt는 멀쩡하게 받아서 insert 되었다고 알림창이 뜨는데, DB에는 업로드가 되지 않습니다.
오류는 '32행'의 
1
mr = new MultipartRequest(req, saveDir, maxSize, encType, new DefaultFileRenamePolicy());
cs
이 오류가 계속해서 떠서 제대로 해결을 못하고 있습니다 ㅠㅠ

어째서 오류가 나는지 이제는 너무 궁금해서 이렇게 질문글을 올려봅니다 ㅠㅠ
0
0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.