博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#分块下载文件实例(二)
阅读量:4287 次
发布时间:2019-05-27

本文共 3842 字,大约阅读时间需要 12 分钟。

一、C#下载实例二

1、测试入口

/// /// 可指定cookie的方式下载/// public static void Test2(){    string url = "http://v2.mukewang.com/98672526-02b5-454c-b31e-d8526755b40b/L.mp4?auth_key=1474171330-0-0-8ff3fe3a33cfd257577dfa999e41530d";    int currentSize = 0;    //第一次请求处理    HttpWebRequest request = GetRequest(url, currentSize);    //获取请求响应    HttpWebResponse resp = (HttpWebResponse)request.GetResponse();    string filename = GetFileName(url, resp);    //创建写入流    FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);    //从响应流中持续读取并保存文件    int readCount = WriteFile(resp, fs);    //关闭流    fs.Close();    Console.WriteLine("下载文件成功");}
2.其他方法定义:

/// /// 指定响应流,将响应流中的数据写入文件/// /// /// public static int WriteFile(HttpWebResponse resp, FileStream fs){    //将响应内容写入文件    Stream stream = resp.GetResponseStream();    //先读出,然后写入    byte[] bytes = new byte[1024 * 512];    int count = 0;    int readCount = 0; //从相应流中读取到的文件大小    while ((count = stream.Read(bytes, 0, bytes.Length)) > 0)    {        //写入文件        fs.Write(bytes, 0, count);        //清空        fs.Flush();        readCount += count;        Console.WriteLine("本次读取:" + count);    }    stream.Close();    return readCount;}/// /// 指定连接地址,指定开始位置或结束位置请求文件内容/// public static HttpWebRequest GetRequest(string url, int start, int? end = null){    try    {        HttpWebRequest request = WebRequest.CreateHttp(url);        request.Method = "GET";        request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";        request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36";        //request.Referer = "http://www.imooc.com/video/11555";        //添加cookie        //request.Headers.Add("cookie", "imooc_uuid=ec12ea83-f2c0-4c14-9dd1-55fbefea18a0; imooc_isnew_ct=1468544598; loginstate=1; apsid=g2ZmJlMTE1MmExYWEwODE0ZTAzNTZmNjJmZDMzN2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjI2MDQ1NQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMDA3MTczMTMyQHFxLmNvbQAAAAAAAAAAAAAAAAAAAGQwOTNjNWUwNjA5MjI3ZDk5MjIxNzc3OWUwYTBlODEzk%2BK8V5PivFc%3DYj; last_login_username=1007173132%40qq.com; bdshare_firstime=1472599723791; PHPSESSID=gqgpva8utntcni03v2nkk69441; jwplayer.volume=100; imooc_isnew=2; cvde=57d5eee17b1e2-41; Hm_lvt_f0cfcccd7b1393990c78efdeebff3968=1473207620,1473291733,1473638111,1473809917; Hm_lpvt_f0cfcccd7b1393990c78efdeebff3968=1473814335; IMCDNS=0");        request.Headers.Add("Accept-Encoding", "identity;q=1, *;q=0");        request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");        request.KeepAlive = true;        if (end != null)            request.AddRange(start, end.Value);        else            request.AddRange(start);        request.Headers.Add("If-None-Match", "56f105a0-33c14ce");        request.Headers.Add("Cache-Control", "max-age=0");        request.IfModifiedSince = DateTime.Now;        return request;    }    catch (Exception ex)    {        throw new Exception("创建请求失败:" + ex.Message);    }}/// /// 获取下载文件名称,根据Mime类型设置/// private static string GetFileName(string url, HttpWebResponse resp){    Uri uri = new Uri(url);    string filename = uri.AbsolutePath.Substring(uri.AbsolutePath.LastIndexOf("/") + 1);    filename = LocalPathHelper.CurrentSolution + "/data/" + filename;    if (filename.Contains(".") == false && string.IsNullOrEmpty(resp.ContentType) == false)    {        string content = resp.ContentType.ToLower();        if (content.Contains("text/plain"))        {            filename += ".txt";        }        else if (content.Contains("text/html"))        {            filename += ".html";        }        else if (content.Contains("application/json"))        {            filename += ".json";        }    }    //测试使用删除已经存在的文件    if (File.Exists(filename))        File.Delete(filename);    return filename;}

转载地址:http://ifogi.baihongyu.com/

你可能感兴趣的文章
线程-消息回环处理机制
查看>>
感谢伤害我的人
查看>>
请不要做浮躁的人----(学习编程的忠告)
查看>>
网络_volley_使用方法和代码
查看>>
网络_AsyncHttpClient_使用方法和代码
查看>>
网络_断点续传.断点下载
查看>>
网络_Xutils
查看>>
网络_多线程下载
查看>>
网络_httpClient
查看>>
网络_HttpURLConnection_原始类
查看>>
网络_OKHttp
查看>>
android_事件分发机制_几行代码直接通晓
查看>>
图片_OOM_OutOfMemory
查看>>
技术学习_经验分享
查看>>
android中常见的设计模式有哪些?
查看>>
ViewDragHelper_v4的滑动视图帮助类_解释和代码
查看>>
android性能优化
查看>>
WebService应用之客户端 Ksoap 库调用
查看>>
WebService - SOAP协议
查看>>
即时通讯技术- 推送技术协议方案
查看>>