问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

前端如何监听上传进度

创作时间:
作者:
@小白创作中心

前端如何监听上传进度

引用
1
来源
1.
https://docs.pingcode.com/baike/2225164

在前端开发中,监听文件上传进度对于提升用户体验至关重要。本文将详细介绍三种主要方法:使用XMLHttpRequest对象、使用Fetch API、使用第三方库(如Axios)。

一、使用XMLHttpRequest对象

1、初始化XMLHttpRequest对象

XMLHttpRequest对象是前端开发中处理HTTP请求的常用工具。它不仅支持同步和异步请求,还允许我们通过事件监听器获取上传进度。

var xhr = new XMLHttpRequest();

2、配置上传事件监听器

通过设置XMLHttpRequest对象的upload属性,我们可以监听上传过程中的事件,例如progress、load、error等。

xhr.upload.addEventListener('progress', function(e) {
    if (e.lengthComputable) {  
        var percentComplete = (e.loaded / e.total) * 100;  
        console.log(`Upload Progress: ${percentComplete}%`);  
    }  
}, false);  

3、发送请求

配置好监听器后,可以通过调用open和send方法发送请求。

xhr.open('POST', '/upload', true);
xhr.send(formData);  

二、使用Fetch API

1、Fetch API简介

Fetch API是现代浏览器中用于发起网络请求的高级接口。它提供了更简洁的语法和强大的功能,但需要结合其他工具来监听上传进度。

2、结合ReadableStream和WritableStream

通过Fetch API,我们可以使用Streams API来处理上传进度。虽然这种方法较为复杂,但在某些高级应用场景中非常有用。

const reader = new FileReader();
reader.onload = function(event) {  
    const arrayBuffer = event.target.result;  
    const stream = new ReadableStream({  
        start(controller) {  
            controller.enqueue(new Uint8Array(arrayBuffer));  
            controller.close();  
        }  
    });  
    fetch('/upload', {  
        method: 'POST',  
        body: stream,  
        headers: {  
            'Content-Type': 'application/octet-stream'  
        }  
    }).then(response => {  
        return response.json();  
    }).then(data => {  
        console.log(data);  
    }).catch(error => {  
        console.error('Error:', error);  
    });  
};  
reader.readAsArrayBuffer(file);  

三、使用第三方库(如Axios)

1、Axios简介

Axios是一个基于Promise的HTTP客户端,适用于浏览器和Node.js。它简化了HTTP请求的处理,并提供了便捷的方法来监听上传进度。

2、配置Axios上传进度

通过设置onUploadProgress选项,可以轻松获取上传进度。

const formData = new FormData();
formData.append('file', file);  
axios.post('/upload', formData, {  
    onUploadProgress: function(progressEvent) {  
        var percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);  
        console.log(`Upload Progress: ${percentCompleted}%`);  
    }  
}).then(response => {  
    console.log(response.data);  
}).catch(error => {  
    console.error('Error:', error);  
});  

四、应用场景及最佳实践

1、用户体验

在实际应用中,监听上传进度有助于提升用户体验。通过实时显示上传进度条或百分比,用户可以清楚地知道上传过程的状态和预期完成时间。

2、大文件上传

对于大文件上传,监听上传进度尤为重要。可以结合后台分片上传技术,将大文件分割成多个小块进行上传,并在前端监听每个小块的上传进度。

3、错误处理

在上传过程中,可能会遇到各种错误,如网络中断、服务器错误等。通过监听error事件,及时捕获并处理这些错误,能够显著提升应用的稳定性和用户满意度。

xhr.upload.addEventListener('error', function(e) {
    console.error('Upload failed:', e);  
}, false);  

五、总结

前端监听上传进度的方法多种多样,主要包括使用XMLHttpRequest对象、使用Fetch API、使用第三方库(如Axios)。其中,使用XMLHttpRequest对象是最常见且直接的方法,通过配置上传事件监听器,可以轻松获取上传进度。此外,Fetch API和第三方库(如Axios)也提供了灵活的解决方案,适用于不同的应用场景。在实际开发中,应根据具体需求选择合适的方法,并结合最佳实践提升用户体验和应用稳定性。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号