ASP.NET 1.1에서 HtmlInputFile 컨트롤을 사용하여 파일을 업로드하고
그 뒤에 웹 서버와 물리적으로 다른 서버에 파일을 업로드하기 위해
아래와 같은 코드를 사용할 수 있습니다.
웹 팜이 구성되어 있는 경우와 같이 웹 서버와 다른 물리적인 서버나
한 서버에 계속 파일을 업로드하기 위해서는 권한 관련되어
주의할 사항이 있다.
결과적으로 파일을 저장하고자 하는 원격지 서버의 폴더에 파일 액세스
권한이 있는 계정으로 ASP.NET 워커 프로세스가 실행되어야 하는 것이
중요한 점입니다.
stringfn = new FileInfo(File1.PostedFile.FileName).Name ;
FileInfo myFile = new FileInfo(@"\\\\<서버이름>\\<공유디렉토리이름 >\\" + fn) ;
File1.PostedFile.SaveAs (myFile.FullName) ;
이러한 내용을 설정하기 위해서는 아래와 같은 절차를 따라 하시면 됩니다.
1. IIS의asp.net 사이트의 등록정보 > 디렉토리보안 > 익명액세스 및 인증제어(편집) > 익명액세스(편집)을 누른다.
2. 사용자이름과 암호를 리모트머신의 계정과 암호를 입력한다.
3.IIS에서 암호를 제어할 수 있음을 체크하지 않는 다.
4. 리모트 머신의 공유하고자하는 폴더에 등록정보의 공유폴더에 사용권한을 (2)에서 설정한 계정을 추가 한다.
5. 그 계정의 권한을 full로 준다.
그리고 ASP.NET의 가장을 이용해서도 원하는 기능을 구현할 수 있습니다.
아래 참고 내용을 보시기 바랍니다.
참고 자료 1 : ASP.NET 응용 프로그램에서 가장(Impersonation) 구현
( http://support.microsoft.com/default.aspx?scid=kb;ko;306158)
간략하게 ASP.NET에서의 Impersonation을 말씀드리면 특정 동작(위의 코드에서의 예를 든다면 Network directory에 파일을 쓰기 위한 동작)을 위해서는 웹페이지에 접근한 계정의 권한으로는 동작할 수 없을 때, 그러한 권한을 가지고 있는 계정으로 가장하여 동작할 수 있도록 하는 기법입니다.
위 문서를 확인하시면 Impersonation에 대한 4가지 방법이 언급되어 있습니다. 위 코드에서는 응용프로그램의 모든 요청에 대해 특정사용자를 가장하는 방법(web.config의 정보를 수정하여 처리함)과 코드에 있는 특정 사용자 가장 방법을 적용하실 수 있습니다.
권장하는 부분은 모든 요청에 대한 impersonation 방법을 사용하는 것 보다, SaveAs method를 호출하기 전에 특정 사용자(Network directory에 권한을 가지고 있는 사용자 계정)를 Impersonation하고, method가 처리된 후에 impersonation을 해제하는 방법을 사용하시는 것이 사이트의 관리상 유리합니다.
***Impersonstion을 테스트하실 때, 문제가 발생하지 않을 수도 있으나 만일, Temporary ASP.NET Files 폴더의 하위폴더의 임의의 파일에 ASPNET계정의 접근권한이 없다라는 에러가 발생할 경우에는 ASPNET계정과 impersonation에 이용되는 계정 둘다 Temporary ASP.NET Files 이하 하위폴더에 접근권한이 없어서 발생하는 에러입니다. 폴더에 대한 권한을 추가하면 에러가 발생하지 않습니다.
참고 자료 2 : HOW TO: Upload a File to a Web Server in ASP.NET by Using Visual C# .NET
( http://support.microsoft.com/default.aspx?scid=kb;en;323246)
참고 자료3 PRB: Cannot Access Remote Files with the FileSystemObject
( http://support.microsoft.com/default.aspx?scid=kb;en;Q197964)
위 문서는 .NET환경은아니지만웹애플리케이션에서의 remote file access에관련된권한문제에대한부분은언급하고 있습니다.