Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 任何人都有执行“a”的示例代码;“分块”;HTTP流式下载将一个web直接上传到另一个web服务器?_C#_Http_Httpwebrequest_Streaming_Chunked Encoding - Fatal编程技术网

C# 任何人都有执行“a”的示例代码;“分块”;HTTP流式下载将一个web直接上传到另一个web服务器?

C# 任何人都有执行“a”的示例代码;“分块”;HTTP流式下载将一个web直接上传到另一个web服务器?,c#,http,httpwebrequest,streaming,chunked-encoding,C#,Http,Httpwebrequest,Streaming,Chunked Encoding,Background-我正在尝试使用C#中的HttpWebRequest/HttpWebResponse将现有网页流式传输到单独的web应用程序。我注意到的一个问题是,我试图使用文件下载的内容长度设置文件上传请求的内容长度,但是问题似乎是源网页位于HttpWebResponse不提供内容长度的Web服务器上 HttpWebRequest downloadRequest = WebRequest.Create(new Uri("downloaduri")) as HttpWebRequest;

Background-我正在尝试使用C#中的HttpWebRequest/HttpWebResponse将现有网页流式传输到单独的web应用程序。我注意到的一个问题是,我试图使用文件下载的内容长度设置文件上传请求的内容长度,但是问题似乎是源网页位于HttpWebResponse不提供内容长度的Web服务器上

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;  // ####
问题:如何更新此方法以适应这种情况(当下载响应没有设置内容长度时)。也许是用记忆流吗?任何示例代码都将不胜感激特别是,是否有一个代码示例可以说明如何进行“分块”HTTP下载和上载,以避免源web服务器不提供内容长度的任何问题?


谢谢

因为我已经在Microsoft论坛上申请了,您有几个选择

但是,这就是我使用
内存流时的方式:

HttpWebRequest downloadRequest = WebRequest.Create(new Uri("downloaduri")) as HttpWebRequest;

byte [] buffer = new byte[4096];
using (MemoryStream ms = new MemoryStream())
using (HttpWebResponse downloadResponse = downloadRequest.GetResponse() as HttpWebResponse)
{
    Stream respStream = downloadResponse.GetResponseStream();
    int read = respStream.Read(buffer, 0, buffer.Length);

    while(read > 0)
    {
        ms.Write(buffer, 0, read);
        read = respStream.Read(buffer, 0, buffer.Length);
    }

    // get the data of the stream
    byte [] uploadData = ms.ToArray();

    var uploadRequest = (HttpWebRequest) WebRequest.Create(new Uri("uripath"));
    uploadRequest.Method = "POST";
    uploadRequest.ContentLength = uploadData.Length;

    // you know what to do after this....
}
另外,请注意,您真的不需要事先知道
ContentLength
的值。正如您所猜测的,您可以在
uploadRequest
上将
SendChunked
设置为
true
,然后从下载流复制到上传流中。或者,您可以在不设置
chunked
的情况下进行复制,
HttpWebRequest
(据我所知)将在内部缓冲数据(确保
uploadrequest
上的
AllowWriteStreamBuffering
设置为
true
),计算出内容长度并发送请求