javascript axios 實(shí)現(xiàn)進(jìn)度監(jiān)控的示例代碼
在使用 axios
發(fā)送 HTTP 請(qǐng)求時(shí),進(jìn)度監(jiān)控非常重要,尤其是在上傳或下載較大文件時(shí)。幸運(yùn)的是,axios
支持通過 onUploadProgress
和 onDownloadProgress
來監(jiān)控上傳和下載的進(jìn)度。
1. 監(jiān)控下載進(jìn)度
axios
提供了一個(gè) onDownloadProgress
回調(diào)函數(shù),可以用來監(jiān)聽下載的進(jìn)度。該回調(diào)會(huì)返回一個(gè) progress
對(duì)象,包含 loaded
(已經(jīng)下載的字節(jié)數(shù))和 total
(文件的總字節(jié)數(shù))等信息。
const axios = require('axios'); axios.get('https://example.com/large-file.zip', { onDownloadProgress: (progressEvent) => { const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total); console.log(`Download Progress: ${percent}%`); } }) .then(response => { console.log('Download completed!'); }) .catch(error => { console.error('Error downloading file:', error); });
2. 監(jiān)控上傳進(jìn)度
對(duì)于文件上傳,也可以使用 onUploadProgress
來監(jiān)控上傳進(jìn)度。該回調(diào)函數(shù)類似,也返回一個(gè) progress
對(duì)象,包含上傳的字節(jié)數(shù)和文件的總字節(jié)數(shù)。
const formData = new FormData(); formData.append('file', fileInput.files[0]); // 假設(shè)文件通過 HTML 的文件輸入獲取 axios.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' }, onUploadProgress: (progressEvent) => { const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total); console.log(`Upload Progress: ${percent}%`); } }) .then(response => { console.log('Upload completed!'); }) .catch(error => { console.error('Error uploading file:', error); });
3. 結(jié)合上傳和下載進(jìn)度
如果你需要同時(shí)監(jiān)控上傳和下載進(jìn)度,可以在同一個(gè) axios
請(qǐng)求中同時(shí)使用 onUploadProgress
和 onDownloadProgress
:
const formData = new FormData(); formData.append('file', fileInput.files[0]); axios.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' }, onUploadProgress: (progressEvent) => { const percentUploaded = Math.round((progressEvent.loaded * 100) / progressEvent.total); console.log(`Upload Progress: ${percentUploaded}%`); }, onDownloadProgress: (progressEvent) => { const percentDownloaded = Math.round((progressEvent.loaded * 100) / progressEvent.total); console.log(`Download Progress: ${percentDownloaded}%`); } }) .then(response => { console.log('Upload and download completed!'); }) .catch(error => { console.error('Error occurred:', error); });
4. 顯示進(jìn)度條
結(jié)合進(jìn)度值,你可以使用瀏覽器的進(jìn)度條(例如 <progress>
元素)來顯示進(jìn)度。
<progress id="upload-progress" value="0" max="100"></progress> <progress id="download-progress" value="0" max="100"></progress>
const uploadProgressBar = document.getElementById('upload-progress'); const downloadProgressBar = document.getElementById('download-progress'); const formData = new FormData(); formData.append('file', fileInput.files[0]); axios.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' }, onUploadProgress: (progressEvent) => { const percentUploaded = Math.round((progressEvent.loaded * 100) / progressEvent.total); uploadProgressBar.value = percentUploaded; }, onDownloadProgress: (progressEvent) => { const percentDownloaded = Math.round((progressEvent.loaded * 100) / progressEvent.total); downloadProgressBar.value = percentDownloaded; } }) .then(response => { console.log('Upload and download completed!'); }) .catch(error => { console.error('Error occurred:', error); });
5. 自定義進(jìn)度顯示
你還可以自定義進(jìn)度條的顯示方式,例如使用 console.log
、alert
或自定義 DOM 元素顯示進(jìn)度。
const formData = new FormData(); formData.append('file', fileInput.files[0]); axios.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' }, onUploadProgress: (progressEvent) => { const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total); document.getElementById('upload-status').innerText = `Upload Progress: ${percent}%`; }, onDownloadProgress: (progressEvent) => { const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total); document.getElementById('download-status').innerText = `Download Progress: ${percent}%`; } }) .then(response => { console.log('Upload and download completed!'); }) .catch(error => { console.error('Error occurred:', error); });
總結(jié)
- 使用
onDownloadProgress
和onUploadProgress
可以實(shí)現(xiàn)文件的上傳和下載進(jìn)度監(jiān)控。 - 你可以根據(jù)
progressEvent
獲取到loaded
和total
字段,計(jì)算出上傳或下載的進(jìn)度百分比。 - 可以結(jié)合瀏覽器的
<progress>
元素或自定義進(jìn)度條來顯示上傳或下載的進(jìn)度。 axios
提供了非常簡(jiǎn)單且直接的方式來實(shí)現(xiàn)文件的進(jìn)度監(jiān)控,適用于大文件的上傳和下載場(chǎng)景。
通過這些方法,你可以輕松地在前端實(shí)現(xiàn)文件上傳和下載的進(jìn)度顯示。
到此這篇關(guān)于javascript axios 實(shí)現(xiàn)進(jìn)度監(jiān)控的示例代碼的文章就介紹到這了,更多相關(guān)js axios進(jìn)度監(jiān)控內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue+axios實(shí)現(xiàn)文件上傳的實(shí)時(shí)進(jìn)度條
- axios進(jìn)度條onDownloadProgress函數(shù)total參數(shù)undefined解決分析
- Vue+Axios實(shí)現(xiàn)文件上傳自定義進(jìn)度條
- vue+element-ui+axios多文件上傳的實(shí)現(xiàn)并顯示整體進(jìn)度
- axios實(shí)現(xiàn)文件上傳并獲取進(jìn)度
- axios+Vue實(shí)現(xiàn)上傳文件顯示進(jìn)度功能
- 使用axios實(shí)現(xiàn)上傳圖片進(jìn)度條功能
- vue使用axios實(shí)現(xiàn)文件上傳進(jìn)度的實(shí)時(shí)更新詳解
相關(guān)文章
JS圖片定時(shí)翻滾效果實(shí)現(xiàn)方法
這篇文章主要介紹了JS圖片定時(shí)翻滾效果實(shí)現(xiàn)方法,涉及javascript結(jié)合時(shí)間函數(shù)實(shí)現(xiàn)頁面元素動(dòng)態(tài)切換的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06JavaScript中的console.profile()函數(shù)詳細(xì)介紹
這篇文章主要介紹了JavaScript中的console.profile()函數(shù)詳細(xì)介紹,本文講解了console.profile()函數(shù)的瀏覽器支持情況、console.profile()的使用、Firebug中Profile按鈕的使用等內(nèi)容,需要的朋友可以參考下2014-12-12JavaScript?中使用SpreadJS導(dǎo)入和導(dǎo)出?Excel?文件的方法
這篇文章主要介紹了如何在?JavaScript?中使用SpreadJS導(dǎo)入和導(dǎo)出?Excel?文件,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09利用JavaScript編寫一個(gè)簡(jiǎn)單的1024小游戲
在每年的10月24日,我們都會(huì)慶祝程序員節(jié),這是一個(gè)向所有辛勤工作、創(chuàng)造出無數(shù)令人驚嘆應(yīng)用和系統(tǒng)的程序員們致敬的日子,為了紀(jì)念這個(gè)特殊的日子,我們將通過編寫一個(gè)簡(jiǎn)單的1024小游戲來向所有程序員們表示敬意,本文將詳細(xì)解釋如何使用JavaScript編寫這個(gè)小游戲2023-10-10微信小程序踩坑記錄之解決tabBar.list[3].selectedIconPath大小超過40kb
這篇文章主要給大家介紹了關(guān)于微信小程序踩坑記錄之解決tabBar.list[3].selectedIconPath大小超過40kb的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07Three.js實(shí)現(xiàn)3D乒乓球小游戲(物理效果)
本文將使用React Three Fiber 和 Cannon.js 來實(shí)現(xiàn)一個(gè)具有物理特性的乒乓球小游戲,使用 React Three Fiber 搭建基礎(chǔ)三維場(chǎng)景、如何使用新技術(shù)棧給場(chǎng)景中對(duì)象的添加物理特性等,最后利用上述知識(shí)點(diǎn),將開發(fā)一個(gè)簡(jiǎn)單的乒乓球小游戲,需要的朋友可以參考下2023-03-03