본문 바로가기

프로그래밍/JAVA, Servlet, JSP

Commons-Fileupload의 한글관련 문제 추가

안녕하세요.. ^^


파일 업로드 찾다가 요기까지 왔네요.. ^^


샘플코드는 잘 봤습니다..

(샘플코드에 변수이름이 조금 잘못 되어 있는 부분이 있었습니다. - 큰문제는 아니죠.. ^^)



파일 업로드를 구현하면서 어려움(?)을 겪었던 부분과 해결 부분을 적어보려 합니다.

(저도 도움을 받았으니, 혹시나 저와 같은 어려움(?) 을 겪으신 분들을 위하여.. ^^)




* OS : Linux
* DB : Oracle
* WAS : OC4J 10g AS


        /**
         * form tag의 input name들이 아래와 같이 있습니다.
         */

        String sMode = "";
       
        String sPageNo = "";
        String sKeyWord = "";
        String sSearchPart = "";
        String sSeqNum = "";
       
        String sAnsTitle = "";
        String sAnsContent = "";
       
        String sFileName = "";
        String sTmpFileName = "";


        try {

            //Multipart로 넘어왔는가?
            if (FileUpload.isMultipartContent(req)) {
               
                DiskFileUpload dfuUpload = new DiskFileUpload();
               
                /**
                 * 이 부분 상당히 애를 먹었습니다.
                 * Windows 환경에서는 문제가 없는데,
                 * 개발 서버(Linux)로 올리게 되면 계속해서 한글이 깨지더군요.
                 *
                 * 그래서, 아래와 같이 DiskFileUpload의 HearderEncoding을 해주었습니다.
                 */

                dfuUpload.setHeaderEncoding("EUC_KR");
               
                List lsItems = dfuUpload.parseRequest(req);
                Iterator iterator = lsItems.iterator();
               

                while (iterator.hasNext()) {

                    FileItem fItem = (FileItem) iterator.next();
                   
                    /**
                     * 넘어오는 form이 multipart일때도 있고 아닐 경우도 있어서
                     * 처리한 부분입니다.
                     *
                     * HashMap을 사용해서 put한 다음에, 필요할때 꺼내 써도 무방할듯 합니다.
                     */

                    if ("mode".equals(fItem.getFieldName())) {
                        sMode = fItem.getString();
                    } else if ("pageNo".equals(fItem.getFieldName())) {
                        sPageNo = fItem.getString();
                    } else if ("keyWord".equals(fItem.getFieldName())) {
                        //한글처리
                        sKeyWord = fItem.getString("EUC_KR");
                    } else if ("searchPart".equals(fItem.getFieldName())) {
                        sSearchPart = fItem.getString();
                    } else if ("seqNum".equals(fItem.getFieldName())) {
                        sSeqNum = fItem.getString();
                    } else if ("ansTitle".equals(fItem.getFieldName())) {
                        //한글처리
                        sAnsTitle = fItem.getString("EUC_KR");
                    } else if ("ansContent".equals(fItem.getFieldName())) {
                        //한글처리
                        sAnsContent = fItem.getString("EUC_KR");
                    }

                    //파일 타입 폼필드라면
                    if (!fItem.isFormField()) {

                        if (fItem.getSize() > 0) {
                            //파일 이름을 가져온다
                            //- 위에서 dfuUpload.setHeaderEncoding("EUC_KR")를 안해 줬더니

                            //   파일이름이 자꾸 깨지더군요.
                            sFileName = fItem.getName().substring(fItem.getName().lastIndexOf("\\") + 1);

                            try {
                                /**
                                 * upload변수는 servlet에서 init 할때 아래와 같이 선언해 주었습니다.
                                 * upload = config.getServletContext().getRealPath("/upload/suggest/");
                                 */

                                File file = new File(upload + sFileName);
                                fItem.write(file);
                            } catch (IOException e) {
                                System.out.println(e);
                            }
                        }
                    }

                }

            } else {
                //multipart가 아닐때 사용되는 parameter들을 가지고 옴

                //WebUtil은 null Check를 위한 util입니다. - 빼도 상관없습니다.
                sMode = WebUtil.nvl((String) req.getParameter("mode"), "");
                sPageNo = WebUtil.nvl((String) req.getParameter("pageNo"), "");
                sKeyWord = WebUtil.nvl((String) req.getParameter("keyWord"), "");
                sSearchPart = WebUtil.nvl((String) req.getParameter("searchPart"), "");
                sSeqNum = WebUtil.nvl((String) req.getParameter("seqNum"), "");
                sAnsTitle = WebUtil.nvl((String) req.getParameter("ansTitle"), "");
                sAnsContent = WebUtil.nvl((String) req.getParameter("ansContent"), "");

            }
        } catch (Exception e) {
            LogManager.getLogger("error").error(e.toString());
        }