網絡編程 —— Http進度條

第一種下載帶進度的方法

string url = "https://nodejs.org/dist/v20.10.0/node-v20.10.0-x64.msi";

1使用getASync獲取服務器響應數據

參數1請求的路徑,
? ? ? ? ? ? 參數2 HttpCompletionOption.ResponseHeadersRead 請求完成時候等待請求帶什么程度才代表請求成功
? ? ? ? ? ? ResponseHeadersRead 讀取到響應頭的時候算是請求完成, 響應頭有個字段可以獲取資源大小
? ? ? ? ? ? ResponseContentRead 讀取到整個響應內容算是請求完成

HttpResponseMessage res = await new HttpClient().GetAsync(url,HttpCompletionOption.ResponseHeadersRead);
2 獲取url的文件名稱
 string fileName = Path.GetFileName(url);
3 將響應數據讀取帶stream對象中
Stream stream =  await res.Content.ReadAsStreamAsync();
4 記錄響應數據的總大小 在響應頭里面有一個ContentLength字段獲取響應大小也就是下載的總大小
long all =  res.Content.Headers.ContentLength ?? 0;
6 定義一個字節數組 字節數組容量是8KB的大小
byte[] bytes = new byte[1024*8];

? ? ? ? ? ?從數據流讀取到字節數組,并且從0開始讀取,到字節數組被容納完為止
? ? ? ? ? ?返回值是整型的,代表是讀取的位置
? ? ? ? ? ?stream.Read(bytes, 0, bytes.Length);?

int nowReadCount = 0; //當前讀取的位置

如果讀取的位置不為0,證明還有數據,還得再次讀取數據

while((nowReadCount = stream.Read(bytes, 0, bytes.Length))!=0)
{// 讀取數據 //b把當前讀取的數據寫入本地fs.Write(bytes, 0, nowReadCount);loadByte += nowReadCount;// 記錄總下載量Console.WriteLine(loadByte);//用已經下載量/總量 *100 轉成百分制度。double progress = (double)loadByte /(double) all * 100;this.progressBar1.Value = (int)progress;
}
fs.Close();
MessageBox.Show("下載完成");

安裝第三方,Microsoft.AspNet.WebApi.Client,
提供了一個下載事件,在事件函數可以獲取下載進度

1創建httpclientHandler 事件對象
HttpClientHandler handler = new HttpClientHandler();

2 創建下載進度的事件對象

ProgressMessageHandler pro = new ProgressMessageHandler(handler);

3 創建下載進度的事件函數

 pro.HttpReceiveProgress += Pro_HttpReceiveProgress;

??Pro_HttpReceiveProgress類

private void Pro_HttpReceiveProgress(object sender, HttpProgressEventArgs e)
{Console.WriteLine(e.ProgressPercentage);//記錄當前的進度//Invoke調用一個方法this.Invoke((Action) (() =>{this.progressBar1.Value = e.ProgressPercentage;}));
}
4 創建請求對象并且發請求,獲取響應 目的是為了通知下載進度對象,再觸發對應的Pro_HttpReceiveProgress函數
 HttpClient client = new HttpClient(pro);
var res = await  client.GetAsync("https://nodejs.org/dist/v20.10.0/node-v20.10.0-x64.msi");
5 讀取響應數據寫入本地
var stream = await res.Content.ReadAsStreamAsync();
var fs = new FileStream("node.msi", FileMode.Create);
fs.CopyTo(fs);
fs.Close();
stream.Close();

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17250.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17250.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17250.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

耐高溫輸送帶的優勢

耐高溫輸送帶:工業運輸的革命性升級,助力生產線高效穩定運行 在現代化工業生產的浪潮中,耐高溫輸送帶以其獨特的優勢,正逐漸成為工業運輸領域的得力助手。它不僅能夠有效提升生產效率,更能確保生產線的安全穩定運行&a…

算法隨想錄第二十天打卡|654.最大二叉樹 , 617.合并二叉樹 ,700.二叉搜索樹中的搜索 , 98.驗證二叉搜索樹

654.最大二叉樹 又是構造二叉樹,昨天大家剛剛做完 中序后序確定二叉樹,今天做這個 應該會容易一些, 先看視頻,好好體會一下 為什么構造二叉樹都是 前序遍歷 題目鏈接/文章講解:代碼隨想錄 視頻講解:又是構…

「動態規劃」打家劫舍

力扣原題鏈接,點擊跳轉。 有一個小偷,要偷東西。假設有n個房間,每個房間都有現金,下標為i的房間內的現金數是nums[i]。不能同時偷相鄰的2個房間,其中第一個房間和最后一個房間是相鄰的。那么這個小偷最多能偷到多少現…

YOLOv8+PyQt5鳥類檢測系統完整資源集合(yolov8模型,從圖像、視頻和攝像頭三種路徑識別檢測,包含登陸頁面、注冊頁面和檢測頁面)

資源包含可視化的鳥類檢測系統,基于最新的YOLOv8訓練的鳥類檢測模型,和基于PyQt5制作的可視化鳥類檢測系統,包含登陸頁面、注冊頁面和檢測頁面,該系統可自動檢測和識別圖片或視頻當中出現的各種鳥類,以及自動開啟攝像頭…

Linux漢化Jupyter Notebook

要在Linux系統中使Jupyter Notebook漢化,可以通過安裝jupyterlab-language-pack-zh-CN擴展來實現。以下是具體步驟和示例代碼: 打開終端。 執行以下命令以安裝Jupyter Notebook的中文語言包: pip install jupyterlab-language-pack-zh-CN …

【CSharp】將ushort數組保存為1通道位深16bit的Tiff圖片

【CSharp】將ushort數組保存為1通道位深16bit的Tiff圖片 1.背景2.接口 1.背景 System.Drawing.Common 是一個用于圖像處理和圖形操作的庫,它是 System.Drawing 命名空間的一部分。由于 .NET Core 和 .NET 5 的跨平臺特性,許多以前內置于 .NET Framework…

基于Fluent和深度學習算法驅動的流體力學計算與應用

“基于Fluent和深度學習算法驅動的流體力學計算與應用”專題大綱 目錄 主要內容 機器學習與流體力學入門 一、流體力學基礎理論與編程實戰1、流體力學的發展概述 2、不可壓縮流體力學的基本方程 3、湍流理論與湍流模型簡介 4、傅里葉變換和流體的尺度分析 5、偽譜法求解不可壓…

Vue小程序項目知識積累(二)

1.wx.reLaunch(Object object) 關閉所有頁面,打開到應用內的某個頁面。 wx.reLaunch({url:/pages/positons/index}) 參數說明: 屬性類型默認值必填說明urlstring是需要跳轉的應用內頁面路徑 (代碼包路徑),路徑后可以帶參數。參數與路徑之…

微信小程序上傳包過大的最全解決方案!

微信小程序的發布大小限制是2MB。然而一個程序怎么能這么小? 介紹一下項目中的經驗。 新項目 如果是剛開始做的新項目,一定確定好自己要用的Ui框架,而且確定之后,千萬不要引入別的,否則占大小!&#xff0…

HNCTF

HNCTF 文章目錄 HNCTFBabyPQEZmathez_Classicf(?*?)MatrixRSABabyAESIs this Iso? BabyPQ nc簽到題,跟端口連接拿到n和phin n 8336450100232098099043686671148282601664696810002345240872579498695511770993195704402414029892029461830476866385453475141207…

【開源】加油站管理系統 JAVA+Vue.js+SpringBoot+MySQL

目錄 一、項目介紹 論壇模塊 加油站模塊 汽油模塊 二、項目截圖 三、核心代碼 一、項目介紹 Vue.jsSpringBoot前后端分離新手入門項目《加油站管理系統》,包括論壇模塊、加油站模塊、汽油模塊、加油模塊和部門角色菜單模塊,項目編號T003。 【開源…

如何使用jQuery重定向到另一個網頁

在我們開始討論如何重定向到另一個網頁之前,必須明確一點:jQuery 是一個用于 DOM 操作的 JavaScript 庫,因此你不應該使用 jQuery 來實現頁面重定向。 jQuery 官方網站的某段話: 雖然 jQuery 可能能夠在較舊的瀏覽器版本中運行,但我們并沒有主動在這些版本中進行測試,也…

矩陣對角化在機器學習中的奧秘與應用

在機器學習的廣闊領域中,矩陣對角化作為一種重要的數學工具,扮演著不可或缺的角色。從基礎的線性代數理論到復雜的機器學習算法,矩陣對角化都在其中發揮著重要的作用。 矩陣對角化的概念與原理 矩陣對角化是矩陣理論中的一個基本概念&#x…

vue.config.js配置參考(2024-05-20)

vue.config.js 是一個可選的配置文件,如果項目的 (和 package.json 同級的) 根目錄中存在這個文件,那么它會被 vue/cli-service 自動加載。 你也可以使用 package.json 中的 vue 字段,但是注意這種寫法需要你嚴格遵照 JSON 的格式來寫。 這…

綜合布線管理軟件有何作用?

當客戶問及“綜合布線管理軟件究竟有何作用?” 我們通常這樣回答: 綜合布線管理軟件,作為運維管理的得力助手,其核心功能旨在確保布線系統的穩定運行與快速響應。 首先,這款軟件通過構建標準化的運維管理流程&#…

Qt for Android

文章 USB Qt for android 獲取USB設備列表(一)Java方式 獲取 Qt for android 獲取USB設備列表(二)JNI方式 獲取 Qt for android 串口庫使用 異常處理 Qt for Android 亂碼問題 andoid開發文檔 UsbManager(apiref.…

四川匯聚榮科技有限公司好不好?

在當今科技飛速發展的時代,企業要想在激烈的市場競爭中脫穎而出,不僅需要先進的技術支持,還需要優質的服務和良好的口碑。那么,四川匯聚榮科技有限公司是否具備這些條件呢?接下來,我們將從公司實力、服務質量、客戶反…

win10換ubuntu

1.首先是格式化windows系統,這里用的是恢復出廠設置 2.然后按照下面教程使用u盤來安裝ubuntuUbuntu 20.04.2.0 LTS 系統安裝過程詳解 (從下載鏡像到安裝系統)_ubuntu安裝教程20.04-CSDN博客 3.然后下面是一些別的準備工作: 1)安…

如何根據系統的業務場景需求定制自己的線程池?

如何根據系統的業務場景需求定制自己的線程池? 1、背景2、生產中應當如何使用線程池才比較合理呢?2.1、指定線程數量2.2、選擇合適的工作隊列2.3、自定義線程工廠2.4、選擇合適的拒絕策略3、自定義線程池代碼案例1、背景 線程池有那么多的參數和類型,在實際的開發中,我們應…

達夢授權某個模式給其它用戶只讀權限

為了在生產環境中將SZSJTJFX模式下的所有對象的只讀權限授予XXXX的賬號SZJG_CPZLJD,可以通過以下分批處理的腳本來完成。此腳本會遍歷SZSJTJFX模式下的所有表和視圖,并生成相應的GRANT語句,以避免“過多的對象名前綴”錯誤。 分批處理的動態…