ADVERTISEMENT
Google AdSense Slot (headerLeaderboard)

Set your Publisher ID in src/config/ads.ts to display live ads.

How-To: 50+ Real-World Developer Recipes• 6 min read

How To: HTML5 Drag & Drop File Upload

Build an interactive file upload dropzone with drag enter/leave highlights and file validation.

The HTML5 Drag and Drop Events

Creating a file dropzone requires overriding the browser's default behavior (which is opening dropped files in a new tab) using e.preventDefault().

Interactive File Dropzone
const dropzone = document.getElementById('dropzone');

// Prevent browser defaults
['dragenter', 'dragover', 'dragleave', 'drop'].forEach(event => {
  dropzone.addEventListener(event, (e) => e.preventDefault());
});

// Visual hover feedback
dropzone.addEventListener('dragenter', () => dropzone.classList.add('border-emerald-500'));
dropzone.addEventListener('dragleave', () => dropzone.classList.remove('border-emerald-500'));

// Handle dropped files
dropzone.addEventListener('drop', (e) => {
  dropzone.classList.remove('border-emerald-500');
  const files = e.dataTransfer.files;
  if (files.length > 0) {
    console.log("Uploaded file:", files[0].name, files[0].size, "bytes");
  }
});
ADVERTISEMENT
Google AdSense Slot (inContentBanner)

Set your Publisher ID in src/config/ads.ts to display live ads.

Test Yourself With Exercise

+15 XP

What method must be called inside "dragover" and "drop" handlers to prevent the browser from opening the file?