| 4 | import java.io.*; |
---|
| 5 | import javax.servlet.*; |
---|
| 6 | import javax.servlet.http.HttpServletRequest; |
---|
| 7 | import javax.servlet.http.HttpServletResponse; |
---|
| 8 | import com.oreilly.servlet.MultipartRequest; |
---|
| 9 | import com.oreilly.servlet.multipart.DefaultFileRenamePolicy; |
---|
| 10 | import java.util.*; |
---|
| 11 | |
---|
| 12 | public class UploadServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { |
---|
| 13 | // 원래 파일 업로드는 post 방식이기 때문에 goGet은 쓰이지않는다. |
---|
| 14 | /* |
---|
| 15 | * protected void doGet(HttpServletRequest request, HttpServletResponse |
---|
| 16 | * response) throws ServletException, IOException { doPost(request, |
---|
| 17 | * response); }// doGet |
---|
| 18 | */ |
---|
| 19 | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { |
---|
| 20 | response.setContentType("text/html;charset=UTF-8"); |
---|
| 21 | PrintWriter out = response.getWriter(); |
---|
| 22 | request.setCharacterEncoding("UTF-8"); |
---|
| 23 | |
---|
| 24 | /* |
---|
| 25 | //톰캣 플러그인을 사용하는 경우 |
---|
| 26 | String savePath = getServletContext().getRealPath("upfolder"); |
---|
| 27 | */ |
---|
| 28 | // Dynamic Web Project 의 경우 : 절대 경로를 쓴다. |
---|
| 29 | String savePath = "C:/upload"; |
---|
| 30 | // out.println("savePath=" + savePath);//경로 확인 |
---|
| 31 | int maxSize = 100 * 1024 * 1024; // 최대 업로드 파일 크기 5MB(메가)로 제한 |
---|
| 32 | try { |
---|
| 33 | // 한글 파일명도 업로드 가능하다 : euc-kr |
---|
| 34 | // 하지만 실제로는 한글 파일명은 처리가 불편하기 때문에 영문 파일을 쓴다. |
---|
| 35 | MultipartRequest multi = null; |
---|
| 36 | try{ |
---|
| 37 | multi = new MultipartRequest(request, savePath, maxSize, "UTF-8", new DefaultFileRenamePolicy()); |
---|
| 38 | }catch(Exception e){ |
---|
| 39 | e.printStackTrace(); |
---|
| 40 | } |
---|
| 41 | out.println("<html>"); |
---|
| 42 | out.println("<head><title>화일 업로드List</title></head>"); |
---|
| 43 | out.println("<body>"); |
---|
| 44 | out.println("<pre>"); |
---|
| 45 | Enumeration params = multi.getParameterNames(); // 파라미터명 얻기 |
---|
| 46 | // 반복문으로 모두 출력하기, 현 예제에는 하나지만 나중에 여러개일 경우을 위해 준비 |
---|
| 47 | while (params.hasMoreElements()) { |
---|
| 48 | String name = (String) params.nextElement(); |
---|
| 49 | String value = multi.getParameter(name); |
---|
| 50 | out.println(name + " : " + value); |
---|
| 51 | }//while |
---|
| 52 | /* |
---|
| 53 | out.println("</pre>"); |
---|
| 54 | out.println("<h3>업로드된 파일에 대한 설명</h3>"); |
---|
| 55 | out.println("<pre>"); |
---|
| 56 | out.println("<table border=1>"); |
---|
| 57 | out.println("<tr>"); |
---|
| 58 | out.println("<td width=150>파일명</td>"); |
---|
| 59 | out.println("<td width=100>파일 크기</td>"); |
---|
| 60 | out.println("<td width=150>파일의 종류</td>"); |
---|
| 61 | out.println("<td width=150>파라미터명</td>"); |
---|
| 62 | out.println("</tr>"); |
---|
| 63 | |
---|
| 64 | Enumeration files = multi.getFileNames(); // 파일명 모두 얻기 |
---|
| 65 | // 반복문으로 모두 출력, 역시 여러 파일 업로드 경우를 위해 준비 |
---|
| 66 | while (files.hasMoreElements()) { |
---|
| 67 | String name = (String) files.nextElement(); |
---|
| 68 | String fileName = multi.getFilesystemName(name); // 실제 업로드된 파일명 |
---|
| 69 | String type = multi.getContentType(name); |
---|
| 70 | File f = multi.getFile(name); |
---|
| 71 | out.println("<tr>"); |
---|
| 72 | out.println("<td>" + fileName + "</td>"); |
---|
| 73 | if (f != null) { |
---|
| 74 | out.println("<td>" + f.length() + "</td>"); |
---|
| 75 | }// if |
---|
| 76 | out.println("<td>" + type + "</td>"); |
---|
| 77 | out.println("<td>" + name + "</td></tr>"); |
---|
| 78 | }// while |
---|
| 79 | out.println("</table>"); |
---|
| 80 | out.println("</pre>"); |
---|
| 81 | out.println("<h3>업로드된 파일 List</h3>"); |
---|
| 82 | out.println("<pre>"); |
---|
| 83 | File dirFile = new File(savePath); // 업로드 폴더 얻기 |
---|
| 84 | File[] fileList = dirFile.listFiles(); // 현재 폴더의 모든 파일 리스트 얻기 |
---|
| 85 | // 반복문으로 다운로드 링크 걸어주기 |
---|
| 86 | for (int i = 0; i < fileList.length; i++) { |
---|
| 87 | String fName = fileList[i].getName(); |
---|
| 88 | out.println(fName); |
---|
| 89 | }// for |
---|
| 90 | out.println("<pre>"); |
---|
| 91 | */ |
---|
| 92 | } catch (Exception e) { |
---|
| 93 | out.print("예외 발생 : " + e); |
---|
| 94 | }// catch |
---|
| 95 | }// doPost |
---|
| 96 | }// end |
---|
| 97 | }}} |
---|