2010-05-20 2 views
0

아래 코드는 ashx 페이지로 파일을 업로드하는 데 사용됩니다. 그것은 위대한 일을하지만, 나는 그것이 얼마나 옮겨 졌는지 알 수있는 적절한 방법을 찾는 것처럼 보인다.WebClient (및 실버 라이트)가 포함 된 .net에서 파일 업로드

호출 코드 :

WebClient wc = new WebClient(); 
wc.OpenWriteCompleted += (s2, e2) => 
{ 
    PushData(e2.Result, offset); 
    e2.Result.Close(); 
}; 
wc.OpenWriteAsync(ub.Uri); 

푸시 데이터 코드 :

private void PushData(Stream output, long offset) 
{ 
    byte[] buffer = new byte[4096]; 
    int bytesRead; 
    bytesRead = theFileStream.Read(buffer, 0, buffer.Length); 
    if (bytesRead != 0) 
    { 
     output.Write(buffer, 0, bytesRead); 

     totalBytesDone += bytesRead; 
     FireUpdateEvent(bytesRead); 
    } 
} 

위의 코드는 간결을 위해, 내 실제 코드에 약간 다릅니다. 이제는 실제 데이터를 보낸 지점 인 output.Write(buffer,0,bytesRead);에 도달했을 때 그 섹션을 작성하고 나면 다음 라인으로 이동하고 잠글 것이라고 가정했습니다. 그러나 그것은 서버에 쓰여지 기 전에 totalBytesDone += bytesRead;으로 진행됩니다. 그 이유는 그 이유는 그 배경에 별도의 스레드에서 글을하고 (또는 내가 실제로 코드의 잘못된 부분을보고있어 그리고 다른 곳에서 씁니다)입니다 -하지만 내 totalBytesDone 코드를 작동 내가 싶어 완성 된 전송까지 잠급니다 (이 모든 것을 나중에 별도의 스레드에 넣을 수 있음).

이 작업을 수행하기 위해 많은 예제를 다운로드했으며 ashx 파일 처리기 (제대로 변경되지 않음)를 제대로 사용하지 않거나 50 % 진행률을보고하는 WebClient 메서드를 사용합니다.

답변

0

this answer을 살펴보십시오.

+0

감사하지만, 불행히도 Silverlight는 모든 방법을 지원하지 않습니다. – Matt

+0

그러면 HttpWebRequest/HttpWebResponse에 의존해야합니다. –

+0

감사합니다. 시도 할 것입니다. – Matt

관련 문제