[.net] ASP.NET 파일다운 처리시 한글파일명 깨짐현상 해결

Posted by RAY.D
2015. 4. 16. 06:03 Web/ASP.NET MVC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.




Content Type을 먼저 사용자의 브라우져에 맞게 설정하셔야합니다.

if (Page.Request.UserAgent.IndexOf("MSIE") >= 0)
      {
       
       if (IE 5.0이상인 경우)
       {
        strContentType = "application/x-msdownload";
       }        
       else //IE 5.0이 아닌 경우.
       {
        strContentType = "application/unknown";
       }                            
      }  
      else
      {
       strContentType = "application/unknown";
      }

아래는 파일명을 내려주는 부분입니다.

      // 한글명일 경우 깨지지 않게 하기 위해     
      if(Page.Request.UserAgent.IndexOf("NT 5.0")>=0)
      {
       strFileName = Server.UrlEncode(filename);
      }
      else
      {
       strFileName = HttpUtility.UrlEncode(strFileName, new  UTF8Encoding()).Replace("+", "%20");
      }

위 부분에 대한 설명입니다.

인터넷 익스플로어는 기본적으로 UTF-8체크에 따라 사용자에게 내려받는 파일의 경로 등을 참조하는데 MS사가 표준을 지키지 않는 까닭으로 한글로 된 파일명에 대해 기본적으로 바이러스로 인식을 하여 신뢰할 수 없다고 평가하게 됩니다.
한글 파일명의 경우에 UTF8로 인코딩한 파일명을 다시 URLENCODE해서 내려주는데 여기에 있어서 NT 5.0에서(windows 2000에서는 URL로 인코딩만을 하면되지만, XP이상의 경우 신뢰할 수 있는 UTF8로 인코딩해야 합니다.) 
간단하게 다시 말하면, 2000에서 신뢰할 수 있는 UTF8로 인코딩할 경우 파일명이 깨지게 되며, XP에서 UTF8로 인코딩하지 않을 경우 파일명이 깨지게 된다. 

출처 : http://hoons.kr/board.aspx?Name=QAASPNET&BoardIdx=3590&Page=1&Mode=2