获取正确的远程文件内容长度

时间:2012-01-12 14:11:06

标签: c# asp.net http

我正在尝试获取远程文件的内容长度,以便我可以限制远程图像的下载大小:

 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);
     }
 }

我的问题是,由于内容长度标题是可选的,因此有时该值是不确定的。

我已经阅读了类似的问题herehere,似乎表明我可以某种方式使用Transfer-Encoding = chunked属性来确定长度,但我找不到如何的示例这样做。

这可能吗?任何人都可以提供代码示例吗?

1 个答案:

答案 0 :(得分:3)

不,这在一般情况下是不可能的。

确定的唯一方法是下载整个资源,并查看 的大小。特别是对于动态生成和/或流式传输资源,可能无法确定响应的大小(例如,直播流甚至不一定具有明确定义的开头或结束 - 它可以继续发送流作为一个巨大的分块响应)。

chunked属性是一种未知大小的变通方法 - 块前面有以下块的大小;然而,没有办法预测会有多少块,也不能预测它的大小。

另外:警告内容长度,有(甚至在2012年!)错误的实施,它会误报它。