태터데스크 관리자

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

태터데스크 메시지

저장하였습니다.

============================  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. Ray Ban Sunglasses 2012/04/23 17:44 댓글주소 | 수정/삭제 | 댓글

    Ray Ban Sunglasses http://www.raybansuk.uk.net/ Ray Ban 3025 http://www.raybansuk.uk.net/ray-ban-3025 http://www.ukmulberrybagssale.co.uk http://www.nbajerseysonline.com

  2. Business logo designs 2012/04/23 18:17 댓글주소 | 수정/삭제 | 댓글

    I want to say that your post is fantastic. You have written it well. Keep on posting. I will come again to read new posts. Thanks.

  3. christian louboutin uk outlet 2012/04/28 16:55 댓글주소 | 수정/삭제 | 댓글

    Dress it up or dress it down, no matter what your preference, go ahead and accentuate your beauty with crystal earrings quickly..christian louboutin uk outlet is so elegance and perfect that I cant help purchasing one. Here's your new way to look sophisticated styles. Carry the hot christian louboutin uk of this summer and be the true trendsetter! http://www.christianlouboutin-ukoutlets.co.uk

  4. christian louboutin uk outlet 2012/04/28 16:56 댓글주소 | 수정/삭제 | 댓글

    Dress it up or dress it down, no matter what your preference, go ahead and accentuate your beauty with crystal earrings quickly..christian louboutin uk outlet is so elegance and perfect that I cant help purchasing one. Here's your new way to look sophisticated styles. Carry the hot christian louboutin uk of this summer and be the true trendsetter! http://www.christianlouboutin-ukoutlets.co.uk

  5. Cheap Ray Ban Sunglasses 2012/05/16 12:41 댓글주소 | 수정/삭제 | 댓글

    Cheap Ray Ban Sunglasses

  6. Cheap Jeans 2012/05/23 11:05 댓글주소 | 수정/삭제 | 댓글

    Cheap Jeans

Write a comment