【发布时间】:2012-01-12 14:11:06
【问题描述】:
我正在尝试获取远程文件的内容长度,以便可以限制远程图像的下载大小:
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);
}
}
我的问题是,由于 content-length 标头是可选的,因此有时该值是不确定的。
我读过类似的问题here 和here,这似乎表明我可以以某种方式使用 Transfer-Encoding=chunked 属性来确定长度,但我没有找到如何执行此操作的示例。
这可能吗?谁能给我一个代码示例?
【问题讨论】:
-
它是可选的(虽然我假设图像几乎总是存在),所以不,你不能在所有情况下都确定这个值。
-
@BrokenGlass 我会这么认为,但调试和使用萤火虫检查都表明并非如此。我专门看的图片在这里images.mymovies.net/images/film/cin/500x377/fid10122.jpg
-
@James South:我在该特定 URL 的响应中看到
Content-Length: 33566:hurl.it/hurls/c79a3f4611819c370e53a30d07958ee1892862b9/… -
@Piskvor:奇怪... hurl.it 必须下载文件并报告长度或使用比我的开发服务器更智能的东西,因为我根本没有获得该属性。
-
@James South:我的所有客户端(FF 9、Chrome 16、IE 6、7、8、Opera 11、wget 1.12)似乎都与 Hurl 一致(来自 Internet 上的多个位置) ,不少于) - 我看到完全相同的标题。你确定这不是你身边的东西吗?