在不使用 Content-Length header 的情况下下载前获取文件大小

Get file size before download without using Content-Length header

我想在下载文件之前获取文件大小,在我的代码中,我从请求中提取 Content-Length header。我的代码在很多情况下都可以正常工作,但在某些情况下没有 Content-Length header,我的问题是在没有 Content-Length [= 的情况下如何获取文件大小21=],这里是我的代码:

HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("https://www.learningcontainer.com/wp-content/uploads/2019/09/sample-docx-file-for-testing.docx");
using (HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse())
{
var headers = myHttpWebResponse.Headers;
    if (headers.AllKeys.Contains("Content-Length"))
        var fileSize = headers.GetValues("Content-Length")[0];
    else
    {
     //code here should be added
    }
}

例如在给定的url中没有Content-Lengthheader

如果没有 Content-Length header,您将无法提前知道内容的大小。

如果您无法控制服务器,那么您将不得不处理它。一种选择是将数据流式传输到磁盘上的临时文件中,一旦有了它,您就可以确定大小,并将其传递给下一步,无论您在做什么。

您可以将它流式传输到内存缓冲区中,但由于您不知道它有多大,因此存在最终 运行 内存不足的风险。