아래 코드는 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 메서드를 사용합니다.
감사하지만, 불행히도 Silverlight는 모든 방법을 지원하지 않습니다. – Matt
그러면 HttpWebRequest/HttpWebResponse에 의존해야합니다. –
감사합니다. 시도 할 것입니다. – Matt