2010-03-17 6 views
0

기본적으로 클라이언트가 서버에 실제로 로그인하지 않고 파일 저장 서버로 파일을 전송하여 클라이언트가 서버의 저장소 위치에 직접 액세스 할 수 없도록하려고합니다. Windows 로그인을 통해 수동으로 스토리지 서버에 로그인하는 경우에만이 작업을 수행 할 수 있습니다. 나는 그 일을하고 싶지 않다. 이것은 웹 기반 응용 프로그램입니다.로컬 컴퓨터에서 다른 컴퓨터로 ASP.NET 파일 전송

아래 링크를 사용하여 응용 프로그램 코드를 작성했습니다. 나는


다음

Uploading files to file server using webclient class

내 코드입니다 ... 오른쪽하지만 그것을 얻을 링크를 참조하시기 바랍니다 나를 함께 해주 도움을 줄 수 아니다 -

protected void Button1_Click(object sender, EventArgs e) 
{ 

    filePath = FileUpload1.FileName;  
    try 
    { 
     WebClient client = new WebClient(); 

     NetworkCredential nc = new NetworkCredential(uName, password); 

     Uri addy = new Uri("\\\\192.168.1.3\\upload\\"); 
     client.Credentials = nc; 
     byte[] arrReturn = client.UploadFile(addy, filePath); 

     Console.WriteLine(arrReturn.ToString()); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 

} 

실행하지 않는 라인을 ... 다음

byte[] arrReturn = client.UploadFile(addy, filePath); 

는 오류가 내가 얻을 수 있습니다 :

An exception occurred during a WebClient request

+0

안녕하세요, 내부 예외가있을 수 있습니까? 로컬로 드라이브를 옵션으로 매핑합니까? -sa – Sascha

+0

ex.Message 대신 ex.ToString()을 표시하면 전체 예외가 발생합니다. 전체 예외를 포함하도록 질문을 편집하십시오. –

답변

1

아, 그럴만 한 이유가 있지만, FileUpload은 파일을 웹 서버 및 해당 드라이브에만 저장할 수 있습니다. 그래서 제 첫 생각은 효과가 없을 것입니다.

그러나 필요한 사용 권한이 있으면 표준 System.IO 호출을 사용하여 FileUpload에서 가져온 파일을 해당 UNC 경로에 저장할 수 있습니까? 뭔가처럼 - 대신 하나의 버퍼를 할당하는 -

protected void Button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string completeFileName = 
      Path.Combine(@"\\192.168.1.3\upload", FileUpload1.FileName); 

     BinaryReader br = new BinaryReader(FileUpload1.PostedFile.InputStream); 

     FileStream fstm = new FileStream(completeFileName, FileMode.Create, FileAccess.ReadWrite); 
     BinaryWriter bw = new BinaryWriter(fstm); 

     byte[] buffer = br.ReadBytes(FileUpload1.PostedFile.ContentLength); 
     br.Close(); 

     bw.Write(buffer); 
     bw.Flush(); 
     bw.Close(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 

업로드 할 매우 큰 파일을 기대한다면, 당신은 덩어리에 BinaryWriterBinaryReader에서 데이터를 전송할 수도 있지만 그건 그냥 구현 세부입니다 , 정말.

+0

이 오류가 발생합니다 : - 로그온 실패 : 알 수없는 사용자 이름 또는 암호가 틀립니다. – Imcl

+0

@Imcl : 예, FileUpload 컨트롤이 원격 위치에 쓸 수 없다 - 내 대답을 업데이트했습니다. –

+0

이 줄은 실행되지 않고 위와 같은 오류를 표시하는 catch 블록에 들어갑니다. - FileStream fstm = new FileStream (completeFileName , FileMode.Create, FileAccess.ReadWrite); – Imcl

1

며칠 전 동일한 문제가 발생하여 동일한 사용자 이름과 암호로 웹 서버와 저장소 서버에 사용자를 만들어 해결했습니다. 그런 다음 web.config 파일에서 사용자를 가장했습니다.

주의 : 사용자는 파일을 저장할 디렉토리에있는 RW 권한이 있어야합니다.

관련 문제