在JavaScript中实现文件上传进度显示,通常涉及到HTML5的XMLHttpRequest
对象或者使用Fetch API
结合ReadableStream
来跟踪上传进度。以下是相关基础概念及实现方式:
function uploadFile(file) {
const xhr = new XMLHttpRequest();
const formData = new FormData();
formData.append('file', file);
xhr.upload.addEventListener('progress', (event) => {
if (event.lengthComputable) {
const percentComplete = (event.loaded / event.total) * 100;
console.log(`上传进度: ${percentComplete.toFixed(2)}%`);
}
});
xhr.open('POST', '/upload');
xhr.send(formData);
}
// 使用示例
const fileInput = document.querySelector('input[type="file"]');
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
uploadFile(file);
});
async function uploadFile(file) {
const url = '/upload';
const formData = new FormData();
formData.append('file', file);
const response = await fetch(url, {
method: 'POST',
body: formData,
onUploadProgress: (progressEvent) => {
if (progressEvent.lengthComputable) {
const percentComplete = (progressEvent.loaded / progressEvent.total) * 100;
console.log(`上传进度: ${percentComplete.toFixed(2)}%`);
}
}
});
if (response.ok) {
console.log('文件上传成功');
} else {
console.error('文件上传失败');
}
}
// 使用示例
const fileInput = document.querySelector('input[type="file"]');
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
uploadFile(file);
});
onUploadProgress
事件在标准的Fetch API中并不存在,需要使用第三方库如fetch-progress
来实现进度跟踪。event.lengthComputable
为true
,并且event.total
和event.loaded
的值是正确的。通过以上方法,可以在JavaScript中实现文件上传进度的显示,提升用户体验。
领取专属 10元无门槛券
手把手带您无忧上云