0

背景- 我正在尝试使用 C# 中的 HttpWebRequest/HttpWebResponse 将现有网页流式传输到单独的 Web 应用程序。我要注意的一个问题是我正在尝试使用文件下载的内容长度来设置文件上传请求的内容长度,但是问题似乎是源网页位于 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 吗?任何示例代码将不胜感激。

4

1 回答 1

1

如果您乐于从其他 Web 服务器完全下载响应,那确实会让生活变得更轻松。当您从第一个 Web 服务器获取数据时,只需重复写入 MemoryStream,然后您就知道为第二个请求设置的长度,并且您可以轻松地写入数据(尤其是MemoryStream有一种WriteTo将其内容写入另一个流的方法)。

这样做的缺点是,如果它是一个大文件,你会占用大量内存。在您的情况下,这可能是一个问题吗?替代方案包括:

  • 写入文件而不是使用MemoryStream. 当然,之后您需要清理文件 - 您基本上将文件系统用作更大的内存:)
  • 使用分块传输编码来“读取一个块,写入一个块”;这可能是正确的 - 这肯定不是我以前做过的事情。
于 2009-12-08T07:53:29.770 回答