在不使用 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-Length
header
如果没有 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-Length
header
如果没有 Content-Length header,您将无法提前知道内容的大小。
如果您无法控制服务器,那么您将不得不处理它。一种选择是将数据流式传输到磁盘上的临时文件中,一旦有了它,您就可以确定大小,并将其传递给下一步,无论您在做什么。
您可以将它流式传输到内存缓冲区中,但由于您不知道它有多大,因此存在最终 运行 内存不足的风险。