[MVC2 게시판] 5. 파일 업로드
2016. 12. 1. 15:43ㆍProgramming/JSP
<파일 업로드 구현 순서>
1) WEB-INF > lib 폴더에 cos.jar 추가
2) BoardAddForm.jsp
1 2 | <form action="boardInsert.do" enctype="multipart/form-data" method="post"> <td><input type="file" name="fileName"></td> | cs |
2) insertController.java
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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | @WebServlet("/boardInsert.do") public class BoardInsertController extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); //파일 업로드하기 //http통신 주 파라미터는 문자열, //file(이미지나 영상)은 문자열로 이루어져 있으나 용량이 너무 크기 때문에 //데이터 나눠 보내는 MultipartRequest 이용 //실제 파일 저장 경로를 설정해야 String savePath = "C:/Users/Increpas/Documents/Jsp_Lesson/Workspace/L15Model2/WebContent/img"; //String savePath = request.getServletContext().getRealPath("/resources/img"); //서버는 프로젝트 서버에 올릴 때 임시파일(temp) 만들어서 publishing한다. //이를 해제하고 실제 경로에 publishing 하기 위해서는 //server 더블 클릭 -> server options에 //server modules without publishing을 체크 //이러한 임시파일은 서버 종료하면 사라짐 int sizeLimit = 1024*1024*15; BoardDao dao = BoardDao.getInstance(); Board board = new Board(); String context = request.getContextPath(); MultipartRequest multi = new MultipartRequest(request, savePath, sizeLimit, "utf-8", new DefaultFileRenamePolicy()); try{ //insert의 목표 //우선 이미지만 저장 -> 이미지 파일이 아니면 저장된 파일을 삭제 //저장된 파일 이름 변경 board_밀리초+.jsp //만약 저장된 파일이 이미지 파일이 아니거나 db에 저장 실패할 경우 //=>저장한 파일 삭제 int num = Integer.parseInt(multi.getParameter("num")); Enumeration fileNames=multi.getFileNames(); //파일 이름 반환 int insert=0; boolean save= true; //파일 저장 성공 //변수 초기화 String fileInput = ""; //폼으로 받아온 fileName String fileName = ""; //저장된 파일 이름 String type = ""; //저장된 파일 종류 File fileObj = null; //저장된 파일 객체 String originFileName = ""; //원본 파일 이름 String fileExtend = ""; //jpg,png,gif 등 확장자 String fileSize = ""; //저장된 파일 사이즈 String newFileName = "board_"+System.currentTimeMillis(); //저장된 파일을 바꿀 이름 System.out.println("newFileName:"+newFileName); while(fileNames.hasMoreElements()){ fileInput = (String)fileNames.nextElement(); fileName = multi.getFilesystemName(fileInput); if(fileName != null){ type = multi.getContentType(fileInput); fileObj = multi.getFile(fileInput); originFileName = multi.getOriginalFileName(fileInput); fileExtend = fileName.substring(fileName.lastIndexOf(".")+1);//"file1.jpg"라면 jpg 반환 fileSize = String.valueOf(fileObj.length());//file도 결국 문자열이므로 length()로 반환 System.out.println("type:"+type+"||originFileName:"+originFileName+ "||fileExtend:"+fileExtend+"||fileSize:"+fileSize); String[] splitType = type.split("/"); if(!splitType[0].equals("image")){ save=false; fileObj.delete(); //저장된 파일 객체로 삭제 break; }else{//만약 이미지 파일이면 저장 파일의 이름 바꾼다. newFileName += "."+fileExtend; fileObj.renameTo(new File(savePath+"\\"+newFileName)); } } } if(save){ //파일 저장 성공시 board.setNum(num); board.setMem_num(Integer.parseInt(multi.getParameter("mem_num"))); board.setTitle(multi.getParameter("title")); board.setContent(multi.getParameter("content")); board.setPasswd(multi.getParameter("passwd")); board.setFileName(fileName); board.setAddress(savePath+"/"+newFileName); insert = dao.insertBoard(board); } if (save && insert > 0) { //DB insert까지 성공시 System.out.println("저장 성공"); response.sendRedirect(context + "/boardDetail.do?num="+num); } else { System.out.println("저장 실패"); response.sendRedirect(context + "/boardAddForm.do"); } }catch(Exception e){e.printStackTrace();} } } | cs |
'Programming > JSP' 카테고리의 다른 글
[MVC2 게시판] 7. Error 페이지 띄우기 (0) | 2016.12.13 |
---|---|
[MVC2 게시판] 6. 접근 제한 걸기(Filter 이용) (0) | 2016.12.06 |
[MVC2 게시판] 4. 페이징(Paging) (0) | 2016.11.28 |
[MVC2 게시판] 3. 회원관리 (0) | 2016.11.25 |
[MVC2 게시판] 2. 로그인 (0) | 2016.11.25 |