【问题标题】:Get file size before download without using Content-Length header在下载前获取文件大小而不使用 Content-Length 标头
【发布时间】:2020-03-04 06:14:07
【问题描述】:

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

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-Length 标头

【问题讨论】:

  • 如果服务器不发送Content-Length标头,则无法确定大小,因为内容将被流式传输;如果不实际阅读,您将无法知道流的大小。

标签: c# httprequest content-length


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 2017-01-22
    • 2021-09-15
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    相关资源
    最近更新 更多