[Jsp] enctype="multipart/form-data" 에서 request.getParameter null 문제

2014. 3. 7. 11:15프로그래밍/Jsp

1)  enctype="multipart/form-data" 로 폼전송을 했을때 받아주는 페이지에서 request.getParameter를 했는데 null이 넘어 올 경우 ->>"multipart/form-data" 로 전송하면 request로 받을 수 없다.


2) 이럴때는 MultiPartRequest.getParameter를 사용하면 되는데, 방법은 아래와 같다.

 - MultipartRequest multi = multi=new MultipartRequest(request, savePath, sizeLimit, "utf-8",
   new DefaultFileRenamePolicy());
   String user_id = multi.getParameter("user_id");


 - 파일의 Rename이 필요할 때가 있는데 Multipart에서 제공하는 DefaultFileRenamePolicy를 사용할 수 도 있지만

    직접 Rename하여 사용하고자 할때는 아래와 같이 하면됨~!

MultipartRequest multi = multi=new MultipartRequest(request, savePath, sizeLimit, "utf-8",
new MyFileRenamePolicy());

   (*) FileRenamePlicy를 implements 하여 아래와 같이 MyFileRenamePolicy class를 생성해준다.

public class MyFileRenamePolicy implements FileRenamePolicy {
    public File rename(File f) {
         long currentTime = System.currentTimeMillis();
         SimpleDateFormat simDf = new SimpleDateFormat("yyyyMMddHHmmss");
         int randomNumber = (int)(Math.random()*100000);
    
         String uniqueFileName = "" + randomNumber + simDf.format(new Date(currentTime));

         String name = f.getName();
         String body = null;
         String ext = null;

         int dot = name.lastIndexOf(".");
         if (dot != -1) {
              body = name.substring(0, dot);
              ext = name.substring(dot);  // includes "."
         }
         else {
              body = name;
              ext = "";
         }
    
         String tempName = uniqueFileName + ext;
         f = new File(f.getParent(), tempName);
         if (createNewFile(f)) {
              return f;
         }

         int count = 0;
         while (!createNewFile(f) && count < 9999) {
              count++;
              String newName = uniqueFileName + "_" + count + ext;
              f = new File(f.getParent(), newName);
         }

         return f;
    }

    private boolean createNewFile(File f) {
         try {
              return f.createNewFile();
         }
         catch (IOException ignored) {
              return false;
         }
    }
}