当前位置: 首页 > news >正文

监听下载上传进度

在Web开发中,监听文件的上传和下载进度是提升用户体验的重要功能。通过使用现代浏览器的API,我们可以轻松实现这个功能。以下是关于如何监听上传和下载进度的详细说明。

1. 监听文件上传进度

对于文件上传,通常使用XMLHttpRequest(XHR)或Fetch API。以下是如何通过这两种方法监听上传进度的示例。

使用 XMLHttpRequest
function uploadFile(file) {const xhr = new XMLHttpRequest();// 监听上传进度xhr.upload.addEventListener("progress", function(event) {if (event.lengthComputable) {const percentComplete = (event.loaded / event.total) * 100;console.log(`Upload progress: ${percentComplete.toFixed(2)}%`);// 这里可以更新进度条等UI元素}}, false);// 处理请求完成的事件xhr.onload = function() {if (xhr.status === 200) {console.log('Upload successful:', xhr.responseText);} else {console.error('Upload failed:', xhr.statusText);}};// 处理请求错误的事件xhr.onerror = function() {console.error('An error occurred during the upload');};// 发送请求xhr.open('POST', '/upload', true);const formData = new FormData();formData.append('file', file);xhr.send(formData);
}
使用 Fetch API

虽然Fetch API不直接支持上传进度,但我们可以通过组合使用ReadableStream来实现。以下是一个示例:

async function uploadFile(file) {const response = await fetch('/upload', {method: 'POST',body: file});// 不支持直接获取进度if (!response.ok) {console.error('Upload failed:', response.statusText);return;}console.log('Upload successful:', await response.text());
}

在Fetch API中,我们需要借助其他手段来实现进度监控。Fetch并不提供内建的进度监听能力,因此更常用的还是XMLHttpRequest

2. 监听文件下载进度

文件下载进度的监听同样可以通过XMLHttpRequest来实现。以下是如何实现下载进度监听的示例。

function downloadFile(url) {const xhr = new XMLHttpRequest();// 监听下载进度xhr.addEventListener("progress", function(event) {if (event.lengthComputable) {const percentComplete = (event.loaded / event.total) * 100;console.log(`Download progress: ${percentComplete.toFixed(2)}%`);// 这里可以更新进度条等UI元素}}, false);// 处理下载完成的事件xhr.onload = function() {if (xhr.status === 200) {console.log('Download successful');const blob = new Blob([xhr.response], { type: 'application/octet-stream' });const link = document.createElement('a');link.href = window.URL.createObjectURL(blob);link.download = 'downloaded_file'; // 自定义文件名link.click();} else {console.error('Download failed:', xhr.statusText);}};// 设置响应类型为blob以便下载xhr.responseType = 'blob';xhr.open('GET', url, true);xhr.send();
}// 使用示例
downloadFile('/path/to/file');

3. 总结

  • 文件上传:可以使用XMLHttpRequestupload事件来监听上传进度,而Fetch API不直接支持上传进度监听。
  • 文件下载:可以使用XMLHttpRequestprogress事件来监听下载进度。

通过实现这些功能,用户在上传和下载文件时可以获得更加直观的反馈,从而提升整体用户体验。你可以根据实际情况调整进度反馈的方式,比如更新进度条、提示信息等。


http://www.mrgr.cn/news/49533.html

相关文章:

  • [STM32] 简单介绍 (一)
  • 现代数字信号处理I-P3 MVUE学习笔记
  • sqli-labs less-26 空格绕过
  • 微知-Bluefield DPU使用flint烧录固件报错MFE_NO_FLASH_DETECTED是什么?MFE是什么?
  • pip install spleeter-gpu下载失败
  • hbuildex运行微信小程序报错
  • C语言解决TopK问题
  • tiktok x-bougs signature 分析
  • leetcode 491.非递减子序列
  • WindowsAPI|每天了解几个winAPI接口之Iphlpapi.h网络配置相关文档详细分析二
  • finebi面试题精选
  • 芋道快速开发平台学习笔记
  • AD9248驱动的简易示波器设计——FPGA学习笔记21
  • 三、ElementPlus下拉搜索加弹窗组件的封装
  • text2sql: multi-agent实现思路MAC-SQL
  • 动力电池SOC估算方法
  • AI 能否替代程序员?且听我来一唠!
  • 【MySQL】数据库基础指令(一)
  • QT开发--串口通信
  • 短视频为什么让人上瘾