在JavaScript中实现批量上传文件的功能,通常涉及到HTML5的File API和XMLHttpRequest或Fetch API。以下是实现这一功能的基础概念、优势、类型、应用场景以及可能遇到的问题和解决方案。
以下是一个使用Fetch API实现批量上传文件的简单示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>批量上传文件</title>
</head>
<body>
<input type="file" id="fileInput" multiple>
<button onclick="uploadFiles()">上传文件</button>
<script>
async function uploadFiles() {
const files = document.getElementById('fileInput').files;
const formData = new FormData();
for (let i = 0; i < files.length; i++) {
formData.append('files[]', files[i]);
}
try {
const response = await fetch('/upload', {
method: 'POST',
body: formData
});
if (response.ok) {
console.log('文件上传成功');
} else {
console.error('文件上传失败');
}
} catch (error) {
console.error('上传过程中发生错误:', error);
}
}
</script>
</body>
</html>
XMLHttpRequest
的progress
事件或Fetch API的ReadableStream
来实现上传进度监控。function uploadFilesWithProgress() {
const files = document.getElementById('fileInput').files;
const formData = new FormData();
for (let i = 0; i < files.length; i++) {
formData.append('files[]', files[i]);
}
const xhr = new XMLHttpRequest();
xhr.open('POST', '/upload', true);
xhr.upload.onprogress = function(event) {
if (event.lengthComputable) {
const percentComplete = (event.loaded / event.total) * 100;
console.log(`上传进度: ${percentComplete}%`);
}
};
xhr.onload = function() {
if (xhr.status === 200) {
console.log('文件上传成功');
} else {
console.error('文件上传失败');
}
};
xhr.onerror = function() {
console.error('上传过程中发生错误');
};
xhr.send(formData);
}
通过以上方法,可以实现一个功能完善且用户体验良好的批量文件上传功能。