我正在尝试获取远程文件的内容长度,以便我可以限制远程图像的下载大小:
WebResponse response = this.GetWebRequest().GetResponse();
long contentLength = response.ContentLength;
// WebResponse.ContentLength doesn't always know the value,
// it returns -1 in this case.
if (contentLength == -1)
{
// Response headers may still have the Content-Length inside of it.
string headerContentLength = response.Headers["Content-Length"];
if (!String.IsNullOrWhiteSpace(headerContentLength))
{
contentLength = long.Parse(headerContentLength,
CultureInfo.InvariantCulture);
}
}
我的问题是,由于内容长度标题是可选的,因此有时该值是不确定的。
我已经阅读了类似的问题here和here,似乎表明我可以某种方式使用Transfer-Encoding = chunked属性来确定长度,但我找不到如何的示例这样做。
这可能吗?任何人都可以提供代码示例吗?
答案 0 :(得分:3)
不,这在一般情况下是不可能的。
确定的唯一方法是下载整个资源,并查看 的大小。特别是对于动态生成和/或流式传输资源,可能无法确定响应的大小(例如,直播流甚至不一定具有明确定义的开头或结束 - 它可以继续发送流作为一个巨大的分块响应)。
chunked
属性是一种未知大小的变通方法 - 块前面有以下块的大小;然而,没有办法预测会有多少块,也不能预测它的大小。
另外:警告内容长度,有(甚至在2012年!)错误的实施,它会误报它。