File Uploader - Code Explanation
HTML STRUCTURE
<div class="upload-area" id="uploadArea">
<div class="upload-icon">📤</div>
<div class="upload-text"><strong>Click to upload or drag and drop</strong></div>
</div>
<input type="file" id="fileInput" multiple>
<div class="file-list" id="fileListContainer">
<div class="file-list-title">Uploaded Files</div>
<div id="fileList"></div>
</div>
JAVASCRIPT CODE
let files = [];
const uploadArea = document.getElementById('uploadArea');
const fileInput = document.getElementById('fileInput');
uploadArea.addEventListener('click', () => fileInput.click());
uploadArea.addEventListener('dragover', (e) => {
e.preventDefault();
uploadArea.classList.add('dragover');
});
uploadArea.addEventListener('drop', (e) => {
e.preventDefault();
uploadArea.classList.remove('dragover');
handleFiles(e.dataTransfer.files);
});
fileInput.addEventListener('change', (e) => {
handleFiles(e.target.files);
});
function handleFiles(newFiles) {
Array.from(newFiles).forEach(file => {
if (file.size > 10 * 1024 * 1024) {
alert(file.name + ' is too large (max 10MB)');
return;
}
files.push({
id: Date.now() + Math.random(),
name: file.name,
size: (file.size / 1024 / 1024).toFixed(2),
type: file.type,
date: new Date().toLocaleDateString()
});
});
displayFiles();
}
function displayFiles() {
const container = document.getElementById('fileListContainer');
const fileList = document.getElementById('fileList');
fileList.innerHTML = '';
files.forEach(file => {
const fileItem = document.createElement('div');
fileItem.className = 'file-item';
fileItem.innerHTML = `
<div class="file-info">
<div class="file-name">${file.name}</div>
<div class="file-size">${file.size} MB</div>
</div>
<button onclick="deleteFile(${file.id})">Delete</button>
`;
fileList.appendChild(fileItem);
});
}
function deleteFile(id) {
files = files.filter(f => f.id !== id);
displayFiles();
}
KEY FEATURES
✓ Click Upload Functionality
✓ Drag & Drop Support
✓ File Size Validation (10MB max)
✓ Multiple File Upload
✓ File Information Display
✓ Delete File Option
✓ Dynamic File List Rendering
✓ Date Stamping
LEARNING CONCEPTS
• File Input Events (change, dragover, drop)
• preventDefault() for Drag Events
• FileList to Array Conversion (Array.from)
• File Size Calculation (Bytes to MB)
• Array.filter() for File Deletion
• Dynamic ID Generation (Date.now() + Math.random())
• classList Methods (add, remove)
• Template Literals for Dynamic HTML
← Back to Project