文章介紹了通過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