文件上传是Web应用中常见的功能,允许用户将本地文件传输到服务器。JavaScript在前端处理文件上传时主要负责文件选择、预览、验证和上传前的准备工作。
// 获取文件输入元素
const fileInput = document.getElementById('fileInput');
fileInput.addEventListener('change', (event) => {
const files = event.target.files;
if (files.length === 0) {
console.log('没有选择文件');
return;
}
// 检查文件数量
console.log(`选择了 ${files.length} 个文件`);
});
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
if (!file) return;
console.log('文件名:', file.name);
console.log('文件大小:', file.size, 'bytes');
console.log('文件类型:', file.type);
console.log('最后修改时间:', file.lastModified);
});
function isValidFileType(file, allowedTypes) {
return allowedTypes.includes(file.type);
}
const allowedTypes = ['image/jpeg', 'image/png', 'application/pdf'];
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
if (!file) return;
if (!isValidFileType(file, allowedTypes)) {
console.error('不支持的文件类型');
return;
}
console.log('文件类型验证通过');
});
const MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
if (!file) return;
if (file.size > MAX_FILE_SIZE) {
console.error('文件大小超过限制');
return;
}
console.log('文件大小验证通过');
});
function previewImage(file, previewElementId) {
const preview = document.getElementById(previewElementId);
const reader = new FileReader();
reader.onload = (e) => {
preview.src = e.target.result;
};
reader.readAsDataURL(file);
}
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
if (!file || !file.type.startsWith('image/')) return;
previewImage(file, 'imagePreview');
});
fileInput.multiple = true; // 允许多选
fileInput.addEventListener('change', (event) => {
const files = Array.from(event.target.files);
files.forEach((file, index) => {
console.log(`文件 ${index + 1}:`, file.name);
});
});
const dropZone = document.getElementById('dropZone');
dropZone.addEventListener('dragover', (e) => {
e.preventDefault();
dropZone.classList.add('dragover');
});
dropZone.addEventListener('dragleave', () => {
dropZone.classList.remove('dragover');
});
dropZone.addEventListener('drop', (e) => {
e.preventDefault();
dropZone.classList.remove('dragover');
const files = e.dataTransfer.files;
console.log('拖放的文件:', files);
});
function uploadFile(file) {
const formData = new FormData();
formData.append('file', file);
const xhr = new XMLHttpRequest();
xhr.upload.onprogress = (e) => {
if (e.lengthComputable) {
const percentComplete = (e.loaded / e.total) * 100;
console.log(`上传进度: ${percentComplete.toFixed(2)}%`);
}
};
xhr.onload = () => {
if (xhr.status === 200) {
console.log('上传成功');
} else {
console.error('上传失败');
}
};
xhr.open('POST', '/upload', true);
xhr.send(formData);
}
通过以上方法和检查点,您可以全面评估和验证您的文件上传JavaScript实现。
没有搜到相关的文章