소스가 ContentLength를 구현하지 않을 때 다른 웹 파일에서 httpwebrequest 업로드에 대한 응답 길이를 얻으려면?

StackOverflow https://stackoverflow.com/questions/1865326

문제

배경 -C#의 HTTPWebRequest/httpwebResponse를 사용하여 기존 웹 페이지를 별도의 웹 응용 프로그램으로 스트리밍하려고합니다. 내가 파일하는 한 가지 문제는 파일 다운로드의 컨텐츠 길이를 사용하여 파일 업로드 요청 컨텐츠 길이를 설정하려고한다는 것입니다. 그러나 소스 웹 페이지가 httpwebresponse가하지 않는 웹 서버에있을 때 문제가있는 것 같습니다. 콘텐츠 길이를 제공하십시오.

HttpWebRequest downloadRequest = WebRequest.Create(new Uri("downloaduri")) as HttpWebRequest;
 using (HttpWebResponse downloadResponse = downloadRequest.GetResponse() as HttpWebResponse)
 {
   var uploadRequest = (HttpWebRequest) WebRequest.Create(new Uri("uripath"));
   uploadRequest.Method = "POST";
   uploadRequest.ContentLength = downloadResponse.ContentLength;  // ####

의문:이 방법을 제공하기 위해이 접근법을 업데이트하는 방법 (다운로드 응답에 콘텐츠 길이 세트가없는 경우). 아마도 memorystream을 어떻게 든 사용하는 것이 될까요? 모든 샘플 코드에 감사드립니다.

도움이 되었습니까?

해결책

다른 웹 서버의 응답을 완전히 다운로드하게되어 기쁘다면 실제로 인생이 더 쉬워집니다. 첫 번째 웹 서버에서 가져 오면서 MemoryStream에 반복적으로 쓰면 두 번째 요청을 위해 설정할 길이를 알고 데이터를 쉽게 (특히 MemoryStream a WriteTo 내용을 다른 스트림에 쓰는 방법).

이것의 단점은 큰 파일이라면 많은 메모리를 취할 것입니다. 상황에서 문제가 될 가능성이 있습니까? 대안은 다음과 같습니다.

  • a를 사용하는 대신 파일에 쓰기 MemoryStream. 물론 나중에 파일을 정리해야합니다. - 기본적으로 파일 시스템을 더 큰 메모리로 사용하고 있습니다 :)
  • 청크 전송 인코딩을 사용하여 "청크를 읽고 청크를 작성하십시오"; 이것 5월 옳은 일을하기 위해 진정으로하십시오 - 그것은 확실히 내가 전에 한 일이 아닙니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top