소스가 ContentLength를 구현하지 않을 때 다른 웹 파일에서 httpwebrequest 업로드에 대한 응답 길이를 얻으려면?
-
16-09-2019 - |
문제
배경 -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월 옳은 일을하기 위해 진정으로하십시오 - 그것은 확실히 내가 전에 한 일이 아닙니다.
제휴하지 않습니다 StackOverflow