ksksksk
50
2020-03-29 03:42:10
7
192

java servlet 초보 다중파일업로드


                    Enumeration efiles = multi.getFileNames();

            while(efiles.hasMoreElements()){

             String formName = (String)efiles.nextElement();

             String test= multi.getFilesystemName(formName); // 파일의 이름 얻기

             System.out.println(test);

             }


드래그앤드랍으로 다중파일업로드 하는데

test에 파일 이름이 마지막 파일 이름만 뜹니다.

예를들면 1.JPG,  2.JPG 파일을 넣으면 2.JPG만 뜹니다.

모두 뜨게 할 수 있는 방법은 없나요?

0
0
  • 답변 7

  • 개굴개굴
    382
    2020-03-29 04:48:43

    정보가 너무 단편적인데

    앞단에서 파일 하나만 넘기고 있는건 아닌지 확인해보세요.

    0
  • ksksksk
    50
    2020-03-29 06:26:44

    파일들은 정상적으로 다 저장됩니다.

    DB에 파일명들을 넣어야하는데 저렇게하니 마지막파일명만 떠서요 ㅜㅜ

    0
  • 개굴개굴
    382
    2020-03-29 15:59:01

    파일들이 정상적으로 저장되는데 DB엔 안들어간다는게 좀 이해가 안되는데..


    Enumeration efiles = multi.getFileNames();
    while(efiles.hasMoreElements()){
    	String formName = (String)efiles.nextElement();
    	String test= multi.getFilesystemName(formName); // 파일의 이름 얻기
    	System.out.println(test);
    	// 파일 저장
    	...
    	// DB 저장
    	...
    }


    순으로 작업하시는거 아닌가요..?

    0
  • ksksksk
    50
    2020-03-29 17:44:15


    if (action.equals("Upload.do")) {
        ProjectDAO dao = new ProjectDAO();
        ProjectVO vo = new ProjectVO();
        RequestDispatcher rd = null;
        String fileName = "";
        String fileLength = "";
        File file = null;
        String savePath = "C:/ProjectImage"; //경로
        int maxSize = 5 * 1024 * 1024; // 파일사이즈 제한
        try {
            MultipartRequest multi = new MultipartRequest(request, savePath, maxSize, "utf-8", new DefaultFileRenamePolicy());
            vo.setTitle(multi.getParameter("title"));
            vo.setLink(multi.getParameter("link"));
            vo.setType(Integer.parseInt(multi.getParameter("type")));
            vo.setDbms(multi.getParameter("dbms"));
            vo.setOs(multi.getParameter("os"));
            // vo.setImage(multi.getFileNames());
            vo.setContent(multi.getParameter("content"));
            Enumeration efiles = multi.getFileNames();
            /*while(efiles.hasMoreElements()){
    		             String formName = (String)efiles.nextElement();
    		             String test = multi.getFilesystemName(formName); // 파일의 이름 얻기
    		             System.out.println(test);
    	                }*/
            int ii = 0;
            while (efiles.hasMoreElements()) {
                String name = (String)efiles.nextElement();
                file = multi.getFile(name);
                String str = file.getName();
                ii ++;
                fileName += "&fileName" + ii + "=" + str;
                fileLength += "&fileLength" + ii + "=" + file.length();
            }
        } catch (Exception e) {
            System.out.print("Error : " + e);
        }
        dao.create(vo); //디비에 값 넣기
        JSONObject obj = new JSONObject();
        obj.put("result", "true");
        response.getWriter().print(obj); //json형태로 리턴
    }


    이런식으로 되어있습니다.

    DB에 안들어가는 것이 아니라

    저장돤 파일명들을 전부 불러와서 그 값들을 ' / ' 로 구분하여 

    Image라는 컬럼에 넣으려고 하는데                 ex) 1.jpg/2.jpg/3.jpg


    저장된 파일명들이 전부 안불러와집니다...

    1.JPG, 2.JPG, 3.JPG 파일을 저장했다면

    while(efiles.hasMoreElements()){
    		             String formName = (String)efiles.nextElement();
    		             String test = multi.getFilesystemName(formName); // 파일의 이름 얻기
    		             System.out.println(test);
    	                }
    System.out.println(test) 에서 3.jpg만 출력을 합니다 ㅜㅜ
    0
  • 개굴개굴
    382
    2020-03-29 17:58:14

    소스를 일부분 자르신거 같아서 정확한 답변을 드리기 어려운데

    Enumeration efiles = multi.getFileNames();

    여기에 브레이크 포인트를 걸어서 multi 객체 한번 확인해보시고, 다음 라인 넘어서 efiles객체를 한번 확인해보세요.

    0
  • ksksksk
    50
    2020-03-29 18:29:57

    찍어보라는 말씀이신가요?

    System.out.print로 찍었을 때
    java.util.Hashtable$Enumerator@3865bdb6        //multi.getFileNames();
    java.util.Hashtable$Enumerator@7b712cb2    // efiles      
    
    이렇게 뜹니다.
    0
  • 개굴개굴
    382
    2020-03-29 18:34:39

    아뇨 객체여서 toString이 오버라이딩되어있지 않으면 저렇게 나올거고

    브레이크 포인트 걸고 디버깅 모드로  돌려보셔야해요~

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