티스토리 뷰

ie8 파일업로드시 경로를 c:/fakepath/파일명 잡아 업로드 되지 않는 경우
 
인터넷 우측 상단의
 
도구 - 인터넷 옵션 - 보안탭 - 사용자 지정 수준 - 파일을 서버에 업로드 할 때 로컬 디렉토리 경로를 포함
 
항목을 사용으로 변경
 
----------------------------------------------------------------------------------------------------
참고 URL : http://greatjewel.blog.me/20112368008
 
input type=file 컨트롤을 사용할때 그 대자인이 심히 마음에 들지 않아 변경하고자 할때가 많다.
그에 대한 대안으로 file control 은 style=`display:none` 을 이용해 숨겨버리고,
추가로 text box 와 image button 을 이용해 button 클릭시
 
onClick=`파일컨드롤.click(), document.getElementById(텍스트박스).value=document.getElementById(파일컨드롤).value;`
의 구조를 이용하는 것은 널리 알려져 있는 Tip 이다.
 
문제는 IE8 의 보안설정. 위의 구조를 이용할때 IE8 은 로컬경로보안에 의해 c:fakepath 로 경로를 전달해 버린다.
그렇다고 사용자의 보안설정을 변경하라고 할수도 없으니 이에 대한 방법을 찾다보니.
 
document.getElementById(파일컨트롤).select();    // file control 을 선택하고
document.selection.createRange().text.toString();    // 실제경로를 받아온다.
 
위와 같은 방법이 가능하다. 하지만 여기서 다시 문제가 발생한다. 위와 같은 방법으로 IE8 에서도 실제경로를 받아오는 것에는 성공했으나,
초기 목적인 file control 을 display:none 시켜버리면 select() 되어 실제경로를 받아오는 것이 안된다.
 
결국은 cs 단에서
 
using System.Web;
 
HttpPostedFile postFile;
postFile = 파일컨트롤.PostedFile;
string[] FileNameAry = postFile.FileName.Split(`\`);
string sFileName = FileNameAry[FileNameAry.Length - 1];
string filePath = 복사할 파일경로;
postFile.SaveAs(FilePath + sFileName);
 
이렇게 하는 것으로 마무리. 굳이 설명하자면 file control 이 변경 될때 cs 단으로 보낸 후 이벤트 함수에서
fakepath 를 신경쓰지 않고 HttpPostedFile 클래스를 이용하여 복사해 버린다. 

Total
Today
Yesterday
최근에 올라온 글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31