태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

============================  UploadWriteForm.jsp  ==============================

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
        <title>cos 업로드 테스트 폼</title>
    </head>
    <body>
        <form method="post" action="/testProject/UploadServlet" enctype="multipart/form-data">
           <table border="1" width="60%">
                <tr>
                   <td>올린이</td>
                   <td><input type="text" name="userName" size="10"></td>
               </tr>
                <tr>
                   <td>올린이</td>
                   <td><input type="password" name="userPasswd" size="10"></td>
               </tr>
               <tr>
                   <td>파일1</td>
                   <td><input type="file" name="upFile1"></td>
               </tr>
               <tr>
                   <td>파일2</td>
                   <td><input type="file" name="upFile2"></td>
               </tr>

               <tr>
                    <td colspan="2">
                         <input type="submit" value="전송">
                    </td>
                </tr>
            </table>
       </form>
    </body>
</html>


========================== web.xml ================================

.
.
 <servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>test.util.UploadServlet</servlet-class>
 </servlet>
 <servlet>
    <servlet-name>DownloadServlet</servlet-name>
    <servlet-class>test.util.DownloadServlet</servlet-class>
 </servlet>
 <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/UploadServlet</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
    <servlet-name>DownloadServlet</servlet-name>
    <url-pattern>/DownloadServlet</url-pattern>
 </servlet-mapping>
.
.
.

========================== UploadServlet.java ================================

package test.util;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
import java.util.*;

public class UploadServlet extends javax.servlet.http.HttpServlet implements
  javax.servlet.Servlet {

 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  response.setContentType("text/html;charset=euc-kr");
  PrintWriter out = response.getWriter();
  request.setCharacterEncoding("euc-kr");
 
   /*
   //톰캣 플러그인을 사용하는 경우
   String savePath = getServletContext().getRealPath("uploadFolder");
   */

  // Dynamic Web Project 의 경우 : 절대 경로를 쓴다.
  String savePath = "C:/eclipse/workspace/testProject/WebContent/uploadFolder";

  int maxSize = 5 * 1024 * 1024; // 최대 업로드 파일 크기 5MB(메가)로 제한

  try {

  /*
    한글 파일 업로드 하는 방법
    CATALINA_HOME의 conf 폴더의 server.xml의 
    다음과 같은 엘레먼트에  URIEncoding="eur-kr" 를 추가 한다.
   <Connector acceptCount="100" connectionTimeout="20000"   
     disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192"    
     maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="8080"
     redirectPort="8443" URIEncoding="eur-kr" />
  */  

   MultipartRequest multi = new MultipartRequest(request, savePath,
     maxSize, "euc-kr", new DefaultFileRenamePolicy());
   out.println("<html>");
   out.println("<head><title>MultipartRequest  fileUpload</title></head>");
   out.println("<body>");
   out.println("<pre>");

   Enumeration params = multi.getParameterNames(); // 파라미터명 얻기

   // 폼필드의 내용을 받기 위해서 반복문으로 필드의 엘레먼트를 받는다.

   while (params.hasMoreElements()) {

      String name = (String) params.nextElement();
      String value = multi.getParameter(name);

      out.println(name + " : " + value);

   }

   out.println("</pre>");

   out.println("<h3>업로드된 파일에 대한 설명</h3>");
   out.println("<pre>");

   out.println("<table border=1>");
   out.println("<tr>");
   out.println("<td width=150>파일명</td>");
   out.println("<td width=100>파일 크기</td>");
   out.println("<td width=150>파일의 종류</td>");
   out.println("<td width=150>파라미터명</td>");
   out.println("</tr>");


   Enumeration files = multi.getFileNames(); // 파일명 모두 얻기

   // 업로드 파일의 정보를 받기 위해서 반복문으로 업로드 파일의 엘레먼트를 받는다.

   while (files.hasMoreElements()) {

       String name = (String) files.nextElement();
       String fileName = multi.getFilesystemName(name); // 실제 업로드된 파일명
       String type = multi.getContentType(name);
       File file = multi.getFile(name);

       out.println("<tr>");
       out.println("<td>" + fileName + "</td>");
       if (file != null) {
         out.println("<td>" + file.length() + "</td>");
       }
       out.println("<td>" + type + "</td>");
       out.println("<td>" + name + "</td></tr>");
   }

   out.println("</table>");
   out.println("</pre>");

   out.println("<h3>MultipartRequest  fileUpload DownLoad List</h3>");
   out.println("<pre>");

   File dirFile = new File(savePath); // 업로드 폴더 얻기
   File[] fileList = dirFile.listFiles();  // 현재 폴더의 모든 파일 리스트 얻기

   // 반복문으로 다운로드 링크 걸어주기
   for (int i = 0; i < fileList.length; i++) {
    String fileName = fileList[i].getName();
    out.println("<a href='/testProject/DownloadServlet?file="
      + fileName + "'>" + fileName + "</a><br>");
   }

   out.println("<pre>");

  } catch (Exception e) {
   out.print("Exception : " + e);
  }
 }
}


 ========================== DownloadServlet.java ================================
package util;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class DownloadServlet extends javax.servlet.http.HttpServlet implements
  javax.servlet.Servlet {
 public void service(HttpServletRequest req, HttpServletResponse res)
   throws ServletException, IOException {
 
  /*
  // 톰캣 플러그인을 사용하는 경우
  String dir = getServletContext().getRealPath("WebContent/uploadFolder");
  */
  String dir = "C:/eclipse/workspace/test_cos_servlet/WebContent/uploadFolder";
  res.setContentType("euc-kr");
  String filename = req.getParameter("file");
  res.setContentType("application/octet;charset=euc-kr");
  res.setHeader("Content-Disposition", "attachment;filename=" + filename);

/*
String mime = getServletContext().getMimeType( file );
if (mime == null)
mime = "application/octet-stream";

res.setContentType( mime );
res.setHeader("Content-Transfer-Encoding", "7bit");
if (req.getHeader("User-Agent").indexOf("MSIE 5.5") > -1) {
res.setHeader("Content-Disposition",
"filename=\"" + URLEncoder.encode( file, "UTF8" )+ "\";");
}else{
res.setHeader("Content-Disposition",
"attachment; filename=\"" + URLEncoder.encode( file, "UTF8" )+ "\";");
}
*/

  // 자바 I/O 를 이용하여 다운로드
  byte[] buffer = new byte[1024];
  ServletOutputStream out = res.getOutputStream();
  BufferedInputStream in = null;

  try {
   in = new BufferedInputStream(new FileInputStream(dir + "\\"
     + filename));
   int n = 0;
   while ((n = in.read(buffer, 0, 1024)) != -1) {
    out.write(buffer, 0, n);
   }
  } catch (Exception e) {
   out.println("Exception  : " + e);
   e.printStackTrace();
  } finally {
    if (in != null) try { in.close(); } catch(Exception e) { }
    if (out != null) try { out.close(); } catch(Exception e) { }
  }
 }
}

top

Trackback Address :: http://www.ssial.com/trackback/32 관련글 쓰기

  1. Chanel Outlet 2011/09/17 21:27 댓글주소 | 수정/삭제 | 댓글

    Time is what you make of it.

  2. Burberry Bags 2011/10/13 16:53 댓글주소 | 수정/삭제 | 댓글

    I'm happy I found this blog! From time to time students want to cognitive the keys of productive literary essays composing. Your first-class knowledge about this good post can become a proper basis for such people. Thanks.

  3. Coach Outlet Online 2011/11/15 12:39 댓글주소 | 수정/삭제 | 댓글

    I'm happy I found this blog ! It's very good and thank you for sharing it !

  4. Coach Outlet Online 2011/11/15 12:40 댓글주소 | 수정/삭제 | 댓글

    I'm happy I found this blog ! It's very good and thank you for sharing it !

  5. Authentic Ben Roethlisberger Jersey 2011/12/07 13:00 댓글주소 | 수정/삭제 | 댓글

    I had been honored to receive a call from my friend when he discovered the important tips shared in your site. Browsing your blog publication is a real brilliant experience. Thank you for taking into consideration readers like me, and I would like for you the best of success as a professional in this surface area.old age and sex.

  6. Jerome Bettis Jersey 2011/12/07 13:01 댓글주소 | 수정/삭제 | 댓글


    great submit, very informative. I’m wondering why the other specialists of this sector do not realize this. You must proceed your writing. I’m sure, you have a huge readers’ base already!

Write a comment