C# http 大文件下载

时间:2021-09-12 20:15:07
最近要做一个下载文件的程序,给一个网络资源(视频,图片等)的url,然后下载到本地。
有一个很简单的方法,如下,但是不稳定,想问问大家有没有收藏的关于C#下载文件不错的类,能够 断点续传,而且对 大文件下载页很稳定。

[align=left]WebClient wc = new WebClient();
        string url = "http://www.baidu.com/img/bdlogo.gif";
                string fileName = "c:\\34.gif";
                wc.DownloadFile(url, fileName);[/align]
          

谢谢各位;啦

7 个解决方案

#1


这类简单的开发,需要自己做。你的这样两行代码,看不出你了解断点续传下载的机制。你还是需要学点知识,自己有能力写出比这个2行代码更高级一点的程序来。

#2


下载文件恢复(resuming),技术不算难。
我找了一个FTP 的,思路基本一致。只是用到的类换一下。
http://wenku.baidu.com/view/30dc5d165f0e7cd1842536cb.html

#3


用Range标头:Range: bytes=0-5

#4


引用 3 楼 LYF610400210 的回复:
用Range标头:Range: bytes=0-5

先HEAD请求,然后Get+Range,不过某些服务器可能不支持。

#5


建议你定义一个大点的缓存区  不然不这个肯定不稳定

#6


我也在弄,自己建站,自己写code,学习中

#7


指定文件下载问题
//首次加载页面方法
protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)//首次加载
        {
            addListBox();   //调用用户自定义的addListBox方法            
        }
}
//被调用的自定义方法
  protected void addListBox()
    {
        //将指定文件夹中的文件保存到字符串数组中
        string[] name = Directory.GetFiles(Server.MapPath("File"));
        foreach (string s in name)
        {
            //将文件名添加到ListBox中
            LisBoxFile.Items.Add(Path.GetFileName(s));
        }     
    }//CodeGo.net/
//实现ListBox控件赋值给Session变量中
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session["txt"] = LisBoxFile.SelectedValue.ToString();//从ListBox控件中选择的项赋值给Session["txt"]中
    }
//保存路径下载该文件
protected void dFile()
    {
        //判断是否选择文件名
        if (LisBoxFile.SelectedValue != "")
        {
            if (Session["txt"] != "")
            {   //获取文件路径
                string path = Server.MapPath("File/") + Session["txt"].ToString();
                //初始化 FileInfo 类的实例,它作为文件路径的包装
                FileInfo fi = new FileInfo(path);
                
                //判断文件是否存在
                if (fi.Exists)
                {
                    //将文件保存到本机上
                    Response.Clear();
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(fi.Name));
                    Response.AddHeader("Content-Length", fi.Length.ToString());
                    Response.ContentType = "application/octet-stream";
                    Response.Filter.Close();
                    Response.WriteFile(fi.FullName);
                    Response.End();
                }
            }
        }
        else
        {
            Page.RegisterStartupScript("sb", "<script>alert('请您先选择文件名')</script>");
        }
    }
//指定下载到本地磁盘中
protected void ImgBtnDownFile_Click(object sender, ImageClickEventArgs e)
    {
       dFile();//调用用户自定义的dFile方法,实现
    }
//断点续传跳转按钮
protected void ImgBtnUp_Click(object sender, ImageClickEventArgs e)
    {
        Response.Redirect("Default.aspx");// 跳转到文件下载
    }

#1


这类简单的开发,需要自己做。你的这样两行代码,看不出你了解断点续传下载的机制。你还是需要学点知识,自己有能力写出比这个2行代码更高级一点的程序来。

#2


下载文件恢复(resuming),技术不算难。
我找了一个FTP 的,思路基本一致。只是用到的类换一下。
http://wenku.baidu.com/view/30dc5d165f0e7cd1842536cb.html

#3


用Range标头:Range: bytes=0-5

#4


引用 3 楼 LYF610400210 的回复:
用Range标头:Range: bytes=0-5

先HEAD请求,然后Get+Range,不过某些服务器可能不支持。

#5


建议你定义一个大点的缓存区  不然不这个肯定不稳定

#6


我也在弄,自己建站,自己写code,学习中

#7


指定文件下载问题
//首次加载页面方法
protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)//首次加载
        {
            addListBox();   //调用用户自定义的addListBox方法            
        }
}
//被调用的自定义方法
  protected void addListBox()
    {
        //将指定文件夹中的文件保存到字符串数组中
        string[] name = Directory.GetFiles(Server.MapPath("File"));
        foreach (string s in name)
        {
            //将文件名添加到ListBox中
            LisBoxFile.Items.Add(Path.GetFileName(s));
        }     
    }//CodeGo.net/
//实现ListBox控件赋值给Session变量中
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session["txt"] = LisBoxFile.SelectedValue.ToString();//从ListBox控件中选择的项赋值给Session["txt"]中
    }
//保存路径下载该文件
protected void dFile()
    {
        //判断是否选择文件名
        if (LisBoxFile.SelectedValue != "")
        {
            if (Session["txt"] != "")
            {   //获取文件路径
                string path = Server.MapPath("File/") + Session["txt"].ToString();
                //初始化 FileInfo 类的实例,它作为文件路径的包装
                FileInfo fi = new FileInfo(path);
                
                //判断文件是否存在
                if (fi.Exists)
                {
                    //将文件保存到本机上
                    Response.Clear();
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(fi.Name));
                    Response.AddHeader("Content-Length", fi.Length.ToString());
                    Response.ContentType = "application/octet-stream";
                    Response.Filter.Close();
                    Response.WriteFile(fi.FullName);
                    Response.End();
                }
            }
        }
        else
        {
            Page.RegisterStartupScript("sb", "<script>alert('请您先选择文件名')</script>");
        }
    }
//指定下载到本地磁盘中
protected void ImgBtnDownFile_Click(object sender, ImageClickEventArgs e)
    {
       dFile();//调用用户自定义的dFile方法,实现
    }
//断点续传跳转按钮
protected void ImgBtnUp_Click(object sender, ImageClickEventArgs e)
    {
        Response.Redirect("Default.aspx");// 跳转到文件下载
    }