【问题标题】:HttpWebRequest Download always starts from begining of file not resumingHttpWebRequest 下载总是从文件的开头开始不恢复
【发布时间】:2016-04-17 00:58:20
【问题描述】:

我正在尝试添加我的下载实用程序的暂停/恢复功能,但 HttpWebRequest.Addrange() 方法似乎无法正常工作。我尝试使用它来恢复下载,但每次运行我的应用程序时,webresponse 总是从文件的开头开始。

下面是我的代码:

  var request = (HttpWebRequest)HttpWebRequest.Create(url);
  request.AddRange((int)iExistLen);
  var downloadStream = request.GetResponse().GetResponseStream();
     for (int byteSize = 0; (byteSize = fileProvider.Read()) > 0;)
            {
                downloadStream.Read(buffer, 0, buffer.Length);
            };

以下是我的下载地址: https://mathinew.blob.core.windows.net/sharedfolder/testfile006.txt

如果有人遇到类似问题,或者我在这里做错了什么,请告诉我

【问题讨论】:

  • 您好,您确定您的服务器支持此功能吗?不是每个服务器都支持它。
  • Azure 支持 Range 标头,但默认情况下不支持。看到这个线程stackoverflow.com/questions/17408927/…

标签: c# .net


【解决方案1】:

从 URL 我可以看出您使用的是Azure Blob Storage

默认情况下,它不尊重 Range 标头,您需要将版本设置为 2011-08-18 或更高版本才能使其工作,例如使用 x-ms-version 标头:

request.Headers["x-ms-version"] = "2011-08-18";

您还可以将 Range 标头的版本全局设置为默认工作,请查看 this questionthis MSDN page 了解更多信息。

【讨论】:

  • 感谢@argaz,它工作正常,但是这个标头是否仅适用于 Azure blob 或所有 URL 类型通用,因为我的客户端工具不知道 URL 用于 IIS/Azure Blob/等,我想为所有类型的 URL 编写唯一的代码、任何建议或我需要设置的更多标题?
  • x-ms-version 特定于 Azure blob,在大多数其他服务器上 Range 标头应该可以工作,除非服务器根本不支持它。
猜你喜欢
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多