¡Ú MultipartRequest¸¦ ÀÌ¿ëÇÏ¿© ¾÷·Îµå±¸ÇöÇϱâ

Last Modified 2002/05/26
Written by hsboy
ReadCount 858


* °­Á¸¦ ½ÃÀÛÇϱâÀü¿¡....

- ±âÁ¸ÀÇ jspSmartUpload¸¦ ´ëÃ¼ÇØ °¡°í ÀÖ´Â MultipartRequest¿¡ ´ëÇÑ °£´ÜÇÑ »ç¿ë¹ý¿¡ ´ëÇØ °­ÀÇ ÇÕ´Ï´Ù.
JSP¸¸À» »ç¿ëÇÏ´Â °­ÁÂÀ̸ç Beans, ServletÀº ´Ù·çÁö ¾Ê½À´Ï´Ù.

- MultipartRequest´Â COS ÆÐŰÁö¿¡ Æ÷ÇԵǾî ÀÖ´Â ÆÄÀÏ ¾÷·Îµå ÄÄÆ÷³ÍÆ® ÀÔ´Ï´Ù.

- COS ¿¡¼­´Â Çѱ۵î(non-Latin-1)ÀÇ ¾ð¾î¸¦ Áö¿øÇÏÁö ¾Ê¾Ò¾ú½À´Ï´Ù. ±×·¯ÇÑ ÀÌÀ¯·Î À̾ƽº(ÀÌâ½Å)´Ô ²²¼­ ¹èÆ÷ÇÑ COSI(COS International) ¸¦ ÁÖ·Î »ç¿ë ÇÏ¿´À¸³ª, À̾ƽº´ÔÀÇ ³ë·Â¿¡ ÈûÀÔ¾î 2002³â 5¿ù 9ÀÏ ÀÚ COS¿¡¼­´Â ÇѱÛÀ» Æ÷ÇÔÇÑ non-Latin-1 °è¿­ÀÇ ¾ð¾î¸¦ Áö¿øÇÏ°Ô µÇ¾ú½À´Ï´Ù. ±Ù 2³â°£ÀÇ ±¹Á¦È­¸¦ À§ÇÑ ÅõÀïÀÌ ºñ·Î¼­ °á½ÇÀ» ¸Î´Â ¼ø°£À̾ú½À´Ï´Ù.
ÀÌ¿¡ µû¶ó º» °­ÁÂÀÇ ³»¿ëµµ COS ¸ÂÃß¾î ¾à°£ÀÇ ¼öÁ¤À» Çß½À´Ï´Ù.

COS °ø½Ä »çÀÌÆ® : http://www.servlets.com/cos/index.html


* MultipartRequest´Â....

ÇÊÀÚ´Â ±âÁ¸¿¡ jspSmartUpload¸¦ ÁÖ·Î »ç¿ëÇÏ¿© ¾÷·Îµå¸¦ ±¸ÇöÇß¾ú´Ù. ÇÏÁö¸¸ jspSmartUpload´Â ·ÎÁ÷ÀÚü¿¡ »ó´çÇÑ ¹®Á¦Á¡(¾÷·ÎµåµÈ ÆÄÀÏÀ» ¸Þ¸ð¸®¿¡ ¿Ã¸®°í ÀÛ¾÷ÇÏ¿© ±×·ÎÀÎÇØ ÆÄ»ýµÇ´Â ¹®Á¦Á¡µé)ÀÌ ÀÖÀ½ÀÌ ¹àÇô Á³°í, ±×·ÎÀÎÇØ jspSmartUploadÀÇ »ç¿ëÀº ±Þ¼ÓÈ÷ ÁÙ¾î µé¾ú´Ù.

»ç½Ç jspSmartUpload¿¡¼­´Â Æí¸®ÇÑ ¸¹Àº ¸Þ¼Òµå¸¦ Áö¿øÇØÁÖ°í ÀÖ¾î MultipartRequest¸¦ »ç¿ëÇÏ´Â°Í º¸´Ù ÈξÀ ½±°Ô ¿øÇÏ´Â ±â´ÉÀ» ±¸Çö ÇÒ¼ö ÀÖ´Â °ÍÀÌ »ç½ÇÀÌ´Ù. ÇÏÁö¸¸ jspSmartUpload´Â ¹®Á¦Á¡ÀÌ ¹ß°ß µÇ¾úÀ¸¹Ç·Î °¡´ÉÇÑ»ç¿ëÀ» ÀÚÁ¦ÇÏ´Â °ÍÀÌ ÁÁ°Ú´Ù.

MultipartRequest´Â ¾ÆÁÖ °£´ÜÇÑ ¸Þ¼Òµå¸¦ ¸î°³ Áö¿øÇÑ´Ù. ÇÏÁö¸¸ ÀÌ ¸Þ¼Òµåµé ¸¸À¸·Îµµ ¿Ø¸¸ÇÑ ±â´ÉÀº ÀüºÎ ±¸ÇöÀÌ °¡´ÉÇÏ´Ï ½Ç¸ÁÇÏÁö ¸»ÀÚ. getFile() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇϸé java.io.File °´Ã¼¸¦ ¾ò¾î ³¾¼ö ÀÖÀ¸´Ï À̸¦ ÀÌ¿ëÇÏ¸é µÉ°ÍÀÌ´Ù.


* ¼³Ä¡Çϱâ

MultipartRequest´Â oreilly¿¡¼­ ¹èÆ÷Çϸç, http://www.servlets.com/cos/index.html¿¡¼­ ´Ù¿î·Îµå ¹Þ¾Æµµ µÇ°í, ÇÊÀÚÀÇ È¨ÆäÀÌÁö(http://aboutjsp.com)ÀÇ ÀÚ·á½Ç¿¡µµ ¾÷·Îµå¸¦ ÇØ³õ¾ÒÀ¸´Ï ´Ù¿î¹Þ¾Æ »ç¿ëÇØ º¸±â ¹Ù¶õ´Ù.

¼³Ä¡ ÇÏ´Â ¹æ¹ýÀº ´Ù¿î·Îµå ¹Þ¾Æ¼­ ¾ÐÃàÀ» ǬµÚ, classes µð·ºÅ丮 ¾Æ·¡¸¦ ÅèĹÀÇ classes µð·ºÅ丮¿¡ Åë°·Î º¹»çÇÑ´Ù. (¿¹.ROOT/WEB-INF/classes) ȤÀº cos.jar¸¦ lib¿¡ º¹»çÇØµµ µÈ´Ù.

COS ÆÐŰÁö±â¿¡´Â MultipartRequest ¸»°íµµ À¯¿ëÇÑ ¸¹Àº Ŭ·¡½ºµéÀÌ ¸¹ÀÌ Á¸ÀçÇϹǷÎ, ¿©±âÀÇ API¹®¼­¸¦ Âü°íÇÏ¿© »ç¿ëÇϱ⠹ٶõ´Ù


* ¾÷·Îµå ±¸Çö

°£´ÜÇÑ ¿¹Á¦¸¦ ÅëÇØ¼­ ¾Ë¾Æ º¸µµ·Ï ÇÏÀÚ.

wirte.htm
<html> <body> <form action="up.jsp" enctype="multipart/form-data" method="post"> À̸§ : <input type="text" name="userName"> <BR> ÆÄÀÏ : <input type="file" name="upfile"> <input type="submit" value="Upload"> </form> </body> </html>

up.jsp
<%@ page contentType="text/html;charset=euc-kr" 
%><%@ page import="com.oreilly.servlet.MultipartRequest,
                   com.oreilly.servlet.multipart.DefaultFileRenamePolicy,
                   java.util.*" 
%><%
 String savePath="/usr/local/tomcat/webapps/ROOT/test/upload"; // ÀúÀåÇÒ µð·ºÅ丮 (Àý´ë°æ·Î)

 int sizeLimit = 5 * 1024 * 1024 ; // 5¸Þ°¡±îÁö Á¦ÇÑ ³Ñ¾î¼­¸é ¿¹¿Ü¹ß»ý

 try{

	MultipartRequest multi=new MultipartRequest(request, savePath, sizeLimit, new DefaultFileRenamePolicy());
 	Enumeration formNames=multi.getFileNames();  // ÆûÀÇ À̸§ ¹Ýȯ
	String formName=(String)formNames.nextElement(); // ÀÚ·á°¡ ¸¹À» °æ¿ì¿£ while ¹®À» »ç¿ë
	String fileName=multi.getFilesystemName(formName); // ÆÄÀÏÀÇ À̸§ ¾ò±â

	if(fileName == null) {   // ÆÄÀÏÀÌ ¾÷·Îµå µÇÁö ¾Ê¾ÒÀ»¶§
		out.print("ÆÄÀÏ ¾÷·Îµå µÇÁö ¾Ê¾ÒÀ½");
	} else {  // ÆÄÀÏÀÌ ¾÷·Îµå µÇ¾úÀ»¶§
		fileName=new String(fileName.getBytes("8859_1"),"euc-kr"); // ÇѱÛÀÎÄÚµù - ºê¶ó¿ìÁ®¿¡ Ãâ·Â
		out.print("User Name : " + multi.getParameter("userName") + "<BR>");
		out.print("Form Name : " + formName + "<BR>");
		out.print("File Name  : " + fileName);
	} // end if

 } catch(Exception e) {
	out.print("¿¹¿Ü »óȲ ¹ß»ý..! ");
 } 
%>
				

À§ÀÇ ¿¹Á¦ ¼Ò½º¸¦ º¸¸é ´ëºÎºÐÀÌ ÀÌÇØ°¡ Àß °¥°ÍÀ̶ó »ý°¢µÇÁö¸¸.. Çϳª¾¿ »ìÆì º¸µµ·Ï ÇϰڴÙ. ¿ì¼± write.htm ¿¡¼­´Â Æû¿¡¼­ method="post" Çü½ÄÀ¸·Î ÇØ¾ß Çϸç ecntype="multipart/form-data" ¸¦ ²À ºÙ¿© ÁÖ¾î¾ß ÇÑ´Ù.

´ÙÀ½À¸·Î up.jsp¸¦ Çϳª Çϳª »ìÆì º¸ÀÚ. MultipartRequest Ŭ·¡½º¸¦ import Çϰí, java.util.* ´ÂEnumeration °´Ã¼¸¦ »ç¿ëÇϱâ À§Çؼ­ import ÇÑ´Ù..

savePath ´Â ÀúÀåµÉ ½ÇÁ¦ µð·ºÅ丮(½Ã½ºÅÛ»óÀÇ Àý´ë °æ·Î)¸¦ ÀûÀ¸¸é µÈ´Ù. sizeLimit ¿¡¼­´Â Á¦ÇÑ ¿ë·®À» ¼ÂÆÃÇϴµ¥, À§¿Í°°Àº¹æ¹ýÀ¸·Î ¸Þ°¡¹ÙÀÌÆ® ´ÜÀ§·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

±× ´ÙÀ½ÁÙ¿¡¼­´Â MultipartRequest °´Ã¼°¡ »ý¼ºµÊ°ú µ¿½Ã¿¡ ¾÷·Îµå°¡ ÀÌ·ç¾îÁ® ÁöÁ¤ÇÑ µð·ºÅ丮¿¡ ÀúÀåµÈ´Ù. À̶§ MultipartRequestÀÇ ¿©·¯ »ý¼ºÀÚµéÁß Çϳª¸¦ ÀÌ¿ëÇÏ¸é µÇ´Âµ¥, ±âÁ¸¿¡´Â »õ¼ºÀÚ·Î ÇÑ±Û "euc-kr"À» Áá¾î¾ß Çߴµ¥, ¾î¾ÀÏÀÎÁö ÀÌÁ¦´Â ÁÖÁö ¾Ê¾Æ¾Æ ÇÑ±Û À̸§ÀÇ ÆÄÀÏÀÌ Àß ÀúÀåµÇ´À´Â °ÍÀ» º¼¼ö ÀÖ´Ù. ¶ÇÇÑ °¡Àå ¿À¸¥ÂÊÀÇ 'new DefaultFileRenamePolicy' ´Â ´Â ÆÄÀÏ À̸§ Áߺ¹Ã³¸®¿¡ °üÇÑ °ÍÀ¸·Î ³ÖÀ»¼öµµ ÀÖ°í, »¬¼öµµ ÀÖ´Ù. ÇÊ¿äÇÏÁö ¾Ê´Ù°í »ý°¢µÈ´Ù¸é »©¹ö¸®µµ·Ï ÇÏÀÚ.

±×¾Æ·¡¿¡ if ¹®À» º¸¸é, ÆÄÀÏÀÌ ¾÷·Îµå µÇ¾úÀ»¶§¿Í ¾÷·Îµå µÇÁö ¾Ê¾ÒÀ»¶§ÀÇ Ã³¸®¸¦ ³ª´©¾î¼­ ÇÒ¼ö ÀÖµµ·Ï Çϰí ÀÖ´Ù.

if ¹® À§ÀÇ 3¶óÀÎÀº ÆÄÀÏÀÇ À̸§À» ¾ò±âÀ§ÇÑ ·ÎÁ÷À¸·Î Enumeration °´Ã¼·Î ¹ÞÀº ÆûÀÇ À̸§À» ÀÌ¿ëÇϰí ÀÖ´Ù. ¸¸¾à ÆûÀÌ ¿©·¯°³°¡ ÀÖÀ» °æ¿ì¿£ ÀûÀýÇÑ ÀÚ·áÇüÀ» ÀÌ¿ëÇÏ¿© ÆûÀÇ À̸§À» ÅëÇØ¼­ ÆÄÀÏÀÇ À̸§µéÀ» ¾ò¾î ³¾¼ö ÀÖÀ» °ÍÀÌ´Ù. ¸¸¾à ÆÄÀÏ ¾÷·Îµå¸¦ Beans·Î ±¸ÇöÇÒ °æ¿ì¿£ ¹Ýµå½Ã ÀÌ·¯ÇÑ ·ÎÁ÷À»(Enumeration °´Ã¼¸¦ ÀÌ¿ëÇÑ loop±¸¹®)»ç¿ëÇØ¾ß ÇÒ °ÍÀÌ´Ù.

»ç½Ç À§ÀÇ ¿¹Á¦¿¡¼­´Â ±»ÀÌ Enumerration °´Ã¼¸¦ °¡Áö°í ±¸ÇöÇÒ ÇÊ¿ä´Â ¾øÁö¸¸, ÇØ´ç ¸Þ¼ÒµåÀÇ »ç¿ë¹ýÀ» º¸¿©ÁÖ±â À§Çؼ­ »ç¿ëÇÏ¿´´Ù. ÀÌ·¯ÇÑ ¹æ¹ýÀ» »ç¿ëÇÏÁö ¾ÊÀ» °æ¿ì¿¡´Â if À§¿¡ 3¶óÀÎÀ» »èÁ¦ÇÏ°í ¾Æ·¡ÀÇ ³»¿ëÀ» Ãß°¡ Çϸé´Ù.

String fileName=multi.getFilesystemName("upfile");


* FileRenamePolicy ¿¡ °üÇØ¼­...

À̹ø ¹öÁ¯ÀÇ MultipartRequest ¿¡¼­ ºÎÅÍ´Â ÆÄÀÏ Áߺ¹Ã³¸® ÀÎÅÍÆäÀ̽º°¡ Ãß°¡ µÇ¾ú°í, À§ÀÇ ¿¹Á¦ ¼Ò½º´Â ±×·¯ÇÑ ³»¿ëÀÌ ¹Ý¿µµÇ¾îÀÖ´Ù. DefaultFileRenamePolicy´Â FileRenamePolicy Interface ¸¦ ±¸ÇöÇÑ °ÍÀ¸·Î, Áߺ¹µÈ ÆÄÀÏ À̸§µÚ¿¡ ¼ýÀÚ¸¦ ºÙ¿© ÁÖ°í ÀÖ´Ù. ( abcd.zip , abcd1.zip, abcd2.zip, abcd3.zip ....... )

DefaultFileRenamePolicy Class¸¦ ¹ÙÅÁÀ¸·Î »õ·Î¿î RenamePolicy class ¸¦ ¸¸µé¸é ÀÚ½ÅÀÌ ¿øÇÏ´Â FileRenamePolicy ¸¦ Àû¿ëÇÒ¼ö ÀÖ´Ù.

¶ÇÇÑ getFilesystemName()¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¿© º¯°æµÈ ÆÄÀÏ À̸§À» ¾òÀ»¼ö ÀÖ°í, getOriginalFileName()¸Þ¼Òµå´Â º¯°æµÇ±â ÀÌÀüÀÇ ÆÄÀÏÀ̸§À» ³Ñ°ÜÁØ´Ù.


* multi.getParameter()

write.htm ¿¡¼­ ¼­Á¤ÇÑ¹Ù¿Í °°ÀÌ enctype="multipart/form-data" ·Î ÁöÁ¤Çϸé, request.getParameter()·Î´Â ¾Æ¹«·¯ °ªµµ ¹Þ¾Æ ¿Ã¼ö°¡ ¾ø°ÔµÈ´Ù. ±×·¯ÇÑ ÀÌÀ¯·Î ´ëºÎºÐÀÇ ÆÄÀϾ÷·Îµå ÄÄÆ÷³ÍÆ®¿¡¼­´Â getParameter() ¸Þ¼Òµå¸¦ Áö¿øÇϴµ¥, MultipartRequest¿¡¼­µµ ÀÌ·¯ÇÑ ¸Þ¼Òµå¸¦ Áö¿øÇÑ´Ù. Áö¿øÇÏ´Â ¸Þ¼Òµå´Â ¾Æ·¡¿Í °°À¸¸ç, »ç¿ë¹ýÀº request.getParameter() µî°ú µ¿ÀÏÇÏ´Ù.

String getParameter(String name)
Enumeration getParameterNames()
String[] getParameterValues(String name)


* Çѱ۰ü·Ã ¹®Á¦ 󸮹ý

MultipartRequest multi=new MultipartRequest(request, savePath, sizeLimit, new DefaultFileRenamePolicy());

À§¸¦ ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤ÇÑ´Ù.

MultipartRequest multi=new MultipartRequest(request, savePath, sizeLimit, "euc-kr", new DefaultFileRenamePolicy());

"euc-kr" ºÎºÐ¿£ "ksc5601", "ms949" µî ÀÚ½ÅÀÇ È¯°æ¿¡ ¾Ë¸Â´Â ij¸¯ÅͼÂÀ» ³Ö¾î ÁÖ¸é µÈ´Ù.

°¢ ¸Þ¼Òµåµé¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »ç¿ë¹ýÀº ¾Æ·¡ÀÇ API¹®¼­¸¦ Âü°í Çϱ⠹ٶõ´Ù.

http://aboutjsp.com/docs/cos/



* °ü·Ã»çÀÌÆ®
http://www.servlets.com/cos/
   COS °ø½Ä »çÀÌÆ®

ÀúÀÚ : À̼±Àç(hsboy)
http://www.aboutjsp.com
´Ù¸¥°÷¿¡ ¿Ã¸®½Ç ¶§´Â ¹Ýµå½Ã Ãâó¸¦ ¸í½ÃÇØ Áֽñ⠹ٶó¸ç µÇµµ·Ï ÀÌ¸é ¸µÅ©¸¦ °É¾î Áֽñ⠹ٶø´Ï´Ù.