zoukankan      html  css  js  c++  java
  • C# 处理文件,视频,音频,压缩包下载

    文章介绍了通过HttpWebRequest和HttpWebResponse实现视频下载的功能;首先HttpWebRequest类利用HTTP 协议和服务器交互,再由HttpWebResponse返回来自网络资源的响应,最后由stream类处理数据流,缓存到本地磁盘;

    上代码之前先上一张Demo的图片,新建一个winform窗体,添加lable控件,ProgressBar和button按钮,以下仅供参考

    using System;
    using System.IO;
    using System.Net;
    using System.Windows.Forms;
    
    namespace FileDownLoad
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                string URL = "https://media.w3.org/2010/05/sintel/trailer.mp4";//视频网络地址
                string filename = @"D:\视频下载\\video.mp4";//存储视频的文件地址
                DownloadFile(URL, filename, progressBar1);//调用下载方法
            }
            /// <summary>
            /// 下载视频
            /// </summary>
            /// <param name="URL">请求地址</param>
            /// <param name="filename">缓存的路径</param>
            /// <param name="prog">进度条</param>
            public void DownloadFile(string URL, string filename, ProgressBar prog)
            {
                try
                {
                    float percent = 0;
                    HttpWebRequest Myrq = (HttpWebRequest)HttpWebRequest.Create(URL);//请求网络资源
                    HttpWebResponse myrp = (HttpWebResponse)Myrq.GetResponse();//返回Internet资源的响应
                    long totalBytes = myrp.ContentLength;//获取请求返回内容的长度
                    if (prog != null)
                    {
                        prog.Maximum = (int)totalBytes;//获取进度条的最大值
                    }
                    Stream st = myrp.GetResponseStream();//读取服务器的响应资源,以IO流的形式进行读写
                    Stream so = new FileStream(filename, FileMode.Create);
                    long totalDownloadedByte = 0;
                    byte[] by = new byte[1024];
                    int osize = st.Read(by, 0, (int)by.Length);
                    while (osize > 0)
                    {
                        totalDownloadedByte = osize + totalDownloadedByte;
                        Application.DoEvents();//交出CPU控制权,让系统可以处理队列中的所有Windows消息 ,防止频繁读写造成程序阻塞或界面停止响应
                        so.Write(by, 0, osize);
                        if (prog != null)
                        {
                            prog.Value = (int)totalDownloadedByte;
                        }
                        osize = st.Read(by, 0, (int)by.Length);//读取当前字节流的总长度
                        percent = (float)totalDownloadedByte / (float)totalBytes * 100;
                        double perNumber = Math.Round(percent);
                        label1.Text = "系统更新已完成:" + perNumber.ToString() + "%";
                        Application.DoEvents();//此处是为了防止lable1的内容来不及显示
                    }
                    so.Flush();
                    so.Close();
                    st.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
    }

    代码完成,实现下载功能,具体Demo请点击文末链接

    点击下载  提取码:yg4g

  • 相关阅读:
    Linus:利用二级指针删除单向链表
    mysql 主从错误以及监控
    高性能Mysql主从架构的复制原理及配置详解
    echarts的tooltip 使用formatter后,设置小圆点
    echarts定点缩放地图 && 监听缩放与拖曳事件
    echarts重新绘制图表。解决下钻地图,在平移和缩放后,下钻到下一级时生成的地图会跑到容器外面去。
    Echarts实现地图下钻+对应区域数据展示+右键返回上一级
    在生产环境清除console.log
    js编辑器--css 防止元素被切
    text-decoration 莫名其妙的覆盖子元素css
  • 原文地址:https://www.cnblogs.com/yply/p/10044835.html
Copyright © 2011-2022 走看看