『QQ:1353814576』

c# HttpWebRequest实现下载显示进度条(后端代码实现)


C# 实现下载进度数据反馈的逻辑代码

下方代码这里只实现了后端下载文件的下载进度委托回调方法返回下载进度百分比以及实时文件大小信息,根据返回的文件大小以及当前文件下载进度百分比(0-100)自行实现前端页面效果,然后绑定到前端进度条控件的对应属性上就可以实现文件实时下载进度效果显示了

    /// <summary>
    /// 下载实时返回下载进度
    /// </summary>
    /// <param name="URL">下载地址</param>
    /// <param name="filename">本地存储地址</param>
    /// <param name="action">委托回调函数</param>
    public void DownloadFileData(string URL, string filename, Action<int, int> action)
    {
        float percent = 0;
        try
        {
            System.Net.HttpWebRequest Myrq =
            (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
            System.Net.HttpWebResponse myrp =
            (System.Net.HttpWebResponse)Myrq.GetResponse();
            long totalBytes = myrp.ContentLength, totalDownloadedByte = 0;

            System.IO.Stream st = myrp.GetResponseStream(), so =
            new System.IO.FileStream(filename, System.IO.FileMode.Create);
            byte[] by = new byte[1024];
            int osize = st.Read(by, 0, (int)by.Length);
            while (osize > 0)
            {
                totalDownloadedByte = osize + totalDownloadedByte;

                so.Write(by, 0, osize);

                osize = st.Read(by, 0, (int)by.Length);

                percent = (float)totalDownloadedByte / (float)totalBytes * 100;//当前位置
                ///反馈回调 返回下载进度
                action((int)totalBytes, (int)percent);
            }
            so.Close();
            st.Close();
        }
        catch (System.Exception)
        {
            throw;
        }
    }

调用例子

//调用方法
DownloadFileData(fileUrl, fileName, delegate (int a, int b){
///a:是文件大小   b:当前下载进度百分比 二者相等时即下载完成
///回写到前端进度条控件上 显示实时下载进度 即可
});