当前位置:  开发笔记 > 编程语言 > 正文

如何从http标头获取文件大小

如何解决《如何从http标头获取文件大小》经验,为你挑选了2个好方法。

我想在下载之前获取http:/.../文件的大小.该文件可以是网页,图像或媒体文件.可以使用HTTP标头完成吗?如何仅下载文件HTTP标头?



1> mdb..:

是的,假设你正在谈论的HTTP服务器支持/允许:

public long GetFileSize(string url)
{
    long result = -1;

    System.Net.WebRequest req = System.Net.WebRequest.Create(url);
    req.Method = "HEAD";
    using (System.Net.WebResponse resp = req.GetResponse())
    {
        if (long.TryParse(resp.Headers.Get("Content-Length"), out long ContentLength))
        {
            result = ContentLength;
        }
    }

    return result;
}

如果不允许使用HEAD方法,或者服务器回复中不存在Content-Length标头,则确定服务器上内容大小的唯一方法是下载它.由于这不是特别可靠,大多数服务器都会包含此信息.


如果你使用`using`它会自动处理它.http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.110).aspx
另外需要注意的是,如果你将这个用于非常大的文件`int`是不够的,你需要使用`long ContentLength;`和`long.TryParse(xxx)`来支持超过2.14GB大小的返回值.

2> Konrad Rudol..:

可以使用HTTP标头完成吗?

是的,这是要走的路.如果提供了信息,它就在标题中Content-Length.但请注意,情况不一定如此.

只下载标题可以使用HEAD请求而不是GET.也许以下代码有帮助:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://example.com/");
req.Method = "HEAD";
long len;
using(HttpWebResponse resp = (HttpWebResponse)(req.GetResponse()))
{
    len = resp.ContentLength;
}

注意HttpWebResponse对象上内容长度的属性 - 无需Content-Length手动解析标头.


@Eric实际上你应该在这里使用`Using`块,或者实现一次性模式来明确地管理资源的生命周期.手动调用"关闭"是不够的,除非你确保*总是*发生,即使出现错误.
推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有