Commons-Fileupload
I. Commons-fileupload ¶õ?
Ä¿¸Õ½ºÀÇ ÆÄÀÏ ¾÷·Îµå ÆÐÅ°Áö´Â »ç¿ë¹ýÀÌ ½¬¿ì¸ç ¾µ¸¸ÇÑ ÇÔ¼öµéÀ» ¸¹ÀÌ Áö¿øÇÕ´Ï´Ù.
SmartUpload, MultipartRequest, Commons fileuploadµîÀ» ¸ðµÎ »ç¿ëÇØ º¸¾ÒÁö¸¸ °³ÀÎÀûÀ¸·Î °¡Àå ¾ÖÂøÀÌ °¡´Â ÆÄÀÏ ¾÷·ÎµåÀÔ´Ï´Ù.
¾Æ½¬¿îÁ¡Àº Commons-fileupload´Â Áö³ 2003³â 6¿ù 1.0¹öÁ¯À¸·Î Á¤½Ä ¸±¸®Áî µÇ¾úÁö¸¸ ±× ÀÌÈÄ·Î ÀÌ·¸´Ù ÇÒ ÆÐÄ¡³ª º¸¾ÈÀÌ ÀüÇô ¾ÈµÇ¾ú´Ù´Â °ÍÀÔ´Ï´Ù. À̸»Àº ÆÄÀÏ ¾÷·Îµå ÀÚü°¡ ±×¸® º¹ÀâÇÑ ÆÐÅ°Áö°¡ ¾Æ´Ï¸ç ù Á¤½Ä ¹öÁ¯ÀÌ ±×¸¸Å ¿Ïº®ÇÏ´Ù´Â °ÍÀ» ¹ÝÁõÇÏ´Â ¸»À̱⵵ ÇÏ°ÚÁö¿ä ^^
II. ´Ù¿î·Îµå ¹× ¼³Ä¡
ÀÚ ´Ù¿î·Îµå ¹ÞÀ¸·¯ °©½Ã´Ù.
http://jakarta.apache.org/site/downloads/downloads_commons-fileupload.cgi
¼³Ä¡´Â ¿ª½Ã³ª /WEB-INF/lib/ Æú´õ¿¡ º¹»çÇÕ´Ï´Ù.
III. ÆÄÀÏ ¾÷·Îµå ó¸® ´Ü°è
¨ç ¸ÕÀú ÆÄÀÏ ¾÷·ÎµåµÈ ¾ÆÀÌÃÀÀ» ó¸®Çϱâ Àü¿¡ À¯È¿ÇÑ RequestÀÎÁö È®ÀÎÇØ¾ß ÇÕ´Ï´Ù.
boolean isMultipart = FileUpload.isMultipartContent(request);
ÀÌ ÄÚµå´Â ÇöÀç request°¡ multipart/form-data·Î µ¥ÀÌÅ͸¦ Àü¼ÛÇß´ÂÁö À¯¹«¸¦ true/false·Î ¹ÝȯÇÕ´Ï´Ù.
¨è ¾÷·ÎµåµÈ ¾ÆÀÌÅÛÀÌ ¸Å¿ì ÀÛ´Ù¸é ¸Þ¸ð¸®¿¡¼ ó¸®ÇÕ´Ï´Ù.
¨é Å« ¾ÆÀÌÅÛÀ̶ó¸é Àӽà ÆÄÀÏÀ» ¸¸µé¾î µð½ºÅ©¿¡ ÀúÀåÇÏ¿© ó¸®ÇÕ´Ï´Ù.
¨ê ³Ê¹« Å« ¾ÆÀÌÅÛÀ̶ó¸é ´ç¿¬È÷ °ÅºÎÇØ¾ß ÇÕ´Ï´Ù.
¨ë ±×·¸Áö ¾Ê°í µðÆúÆ®·Î ¼³Á¤ÇÑ ¸Þ¸ð¸®, ÃÖ´ë°ªÀÇ ¹üÀ§¸¦ ÃÊ°úÇÏÁö ¾Ê´Â´Ù¸é ¾÷·Îµå¸¦ ½ÃÀÛÇÕ´Ï´Ù.
¨è ~ ¨ë ±îÁö¸¦ ´ÙÀ½°ú °°ÀÌ °£´ÜÈ÷ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
// ÆÄÀÏ ¾÷·Îµå Çڵ鷯¸¦ »ý¼º
DiskFileUpload upload = new DiskFileUpload();
// Çѹø¿¡ ¸Þ¸ð¸®¿¡ ÀúÀåÇÒ »çÀÌÁî ¼³Á¤
upload.setSizeThreshold(yourMaxMemorySize);
// ÆÄÀÏ ¾÷·Îµå ÃÖ´ë »çÀÌÁ ¼³Á¤
upload.setSizeMax(yourMaxRequestSize);
// ÆÄÀÏ ¾÷·Îµå °æ·Î¸¦ ¼³Á¤
upload.setRepositoryPath(yourTempDirectory);
¨ì ÀÌÁ¦ Àü¼ÛµÈ request¸¦ parsingÇÏ¿© ¾ÆÀÌÅÛµéÀ» ÃßÃâÇÕ´Ï´Ù.
List /* FileItem */ items = upload.parseRequest(request);
À§¿¡¼ ¼³Á¤ÇÑ °ªµéÀ» request parsing´ÜÀ§·Î µû·Î ¼³Á¤ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
List /* FileItem */ items = upload.parseRequest(request,
yourMaxMemorySize, yourMaxRequestSize, yourTempDirectory);
¨í ÀÌ·¸°Ô ÃßÃâµÈ items¸¦ ÀÌÁ¦ ÆûÇʵå ŸÀÔ¿¡ µû¶ó ÀûÀýÈ÷ ó¸® ÇÕ´Ï´Ù.
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// ÆÄÀÏ Å¸ÀÔÀÌ ¾Æ´Ñ ´Ù¸¥ ÆûÇʵå¶ó¸é
if (item.isFormField()) {
processFormField(item);
// ÆÄÀÏ Å¸ÀÔ ÆûÇʵå¶ó¸é
} else {
processUploadedFile(item);
}
}
¨î ÆûÇʵ忡 µû¸¥ ó¸®
¸¸¾à ÆûÇʵ尡 ÆÄÀÏ ÀÌ¿ÜÀÇ ÆĶó¹ÌÅͶó¸é ´ÙÀ½°ú °°ÀÌ Ã³¸®ÇÏ¸é µË´Ï´Ù.
if (item.isFormField()) {
//ÆĶó¹ÌÅÍ À̸§
String name = item.getFieldName();
//ÆĶó¹ÌÅÍ °ª
String value = item.getString();
...
}
¸¸¾à ÆûÇʵ尡 ÆÄÀÏ ÆĶó¹ÌÅͶó¸é ´ÙÀ½°ú °°ÀÌ Ã³¸®ÇÏ¸é µË´Ï´Ù.
if (!item.isFormField()) {
// ÆĶó¹ÌÅÍ À̸§
String fieldName = item.getFieldName();
// ÆÄÀÏ À̸§ (°æ·ÎÆ÷ÇÔ)
String fileName = item.getName();
String contentType = item.getContentType();
// ¾÷·ÎµåÇÑ ÆÄÀÏÀÌ ¸Þ¸ð¸®¿¡ ÀúÀåµÈ »óŸé true, °Å·¸Áö ¾Ê°í Àӽà ÆÄÀÏ·Î ÀúÀåµÈ °æ¿ì false¸¦ ¸®ÅÏ
boolean isInMemory = item.isInMemory();
// ÆÄÀÏ»çÀÌÁî
long sizeInBytes = item.getSize();
...
// ÆÄÀÏ °´Ã¼¸¦ Çϳª ¸¸µé¾î ¾÷·Îµå ¿Ï·á!
File uploadedFile = new File(...);
item.write(uploadedFile);
}
¨ï ÆÄÀÏ ¾÷·Îµå ¹æ½Ä
ÆÄÀÏ ¾÷·Îµå ¹æ½Ä¿¡´Â ¸ðµÎ 3°¡Áö°¡ Á¸ÀçÇÕ´Ï´Ù.
-. FileItem.write(File file);
-. FileItem.getInputStream();
-. FileItem.get()
write ´Â Á÷Á¢ÀûÀ¸·Î ¾÷·ÎµåÇÑ ÆÄÀÏÀ» ÀúÀåÇÏ´Â °¡Àå ÀϹÝÀûÀÌ°í °£´ÜÇÑ ¹æ½ÄÀÔ´Ï´Ù.
³ª¸ÓÁö µÎ ¹æ½ÄÀº ½ºÆ®¸²À» »ç¿ëÇÏ¿© ¾÷·ÎµåÇÑ ÆÄÀÏÀÌ ¾î¶² Ưº°ÇÑ Ã³¸®¸¦ ÇÒ ¶§ »ç¿ëÇÕ´Ï´Ù. ȤÀº µ¥ÀÌÅͺ£À̽º¿¡ ¹Ù·Î ÀúÀå ÇÒ °æ¿ì¿¡µµ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ get()Àº ¸Þ¸ð¸®¿¡ ¸ðµÎ ÇÒ´çÇÏ¿© ÀÛ¾÷À» ÇÏ´Ï ÁÖÀǸ¦ ¿äÇÕ´Ï´Ù.
VI. »ùÇÃÄÚµå
import java.io.*;
public class UploadServlet extends HttpServlet {
String upload = null;
try { DiskFileUpload fileUload = new DiskFileUpload();
Iterator iterator = items.iterator();
if (!item.isFormField()) { } catch (org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException e) { // ÆÄÀÏ »çÀÌÁî ÃÊ°ú½Ã ¹ß»ýÇÏ´Â ÀͼÁ¼Ç |
=============================================
º»¹®¼´Â ÀÚÀ¯·Ó°Ô ¹èÆ÷/º¹»ç ÇÒ¼ö ÀÖÁö¸¸
À̹®¼ÀÇ ÀúÀÚ¿¡ ´ëÇÑ ¾ð±ÞÀ» »èÁ¦ÇÏ½Ã¸é ¾ÈµË´Ï´Ù
ÀúÀÚ : GoodBug (unicorn@jakartaproject.com)
ÃÖÃÊ : http://www.jakartaproject.com
=============================================