原生JavaScript多文件上传插件是一种允许用户通过网页界面一次性选择并上传多个文件的工具。这种插件通常基于HTML5的File API和XMLHttpRequest或Fetch API来实现文件的读取和上传。
以下是一个简单的原生JavaScript多文件上传的示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Multi File Upload</title>
</head>
<body>
<input type="file" id="fileInput" multiple>
<button onclick="uploadFiles()">Upload</button>
<div id="progress"></div>
<script>
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]);
}
fetch('/upload', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
console.log('Success:', data);
document.getElementById('progress').innerText = 'Upload complete!';
})
.catch((error) => {
console.error('Error:', error);
document.getElementById('progress').innerText = 'Upload failed.';
});
}
</script>
</body>
</html>
原因:可能是因为没有正确处理上传过程中的进度事件。
解决方法:使用XMLHttpRequest
的upload.onprogress
事件来跟踪上传进度。
const xhr = new XMLHttpRequest();
xhr.upload.onprogress = function(event) {
if (event.lengthComputable) {
const percentComplete = (event.loaded / event.total) * 100;
console.log(`Upload progress: ${percentComplete.toFixed(2)}%`);
}
};
原因:用户可能尝试上传不允许的文件类型或过大的文件。 解决方法:在上传前检查文件的类型和大小。
for (let i = 0; i < files.length; i++) {
if (!files[i].type.match(/image\/.*/)) {
alert('Only images are allowed!');
return;
}
if (files[i].size > 5 * 1024 * 1024) { // 5MB limit
alert('File size exceeds the limit of 5MB!');
return;
}
formData.append('files[]', files[i]);
}
通过上述方法,可以有效地实现一个原生JavaScript多文件上传功能,并处理一些常见的上传问题。
领取专属 10元无门槛券
手把手带您无忧上云