Interactive demo of hcg-file-drop, a zero-dependency drag-and-drop file upload widget.
Try type filtering, a removable file list, duplicate detection, and disable or reset controls.
Version .
hcg-file-drop - Full documentation
Pass a container element and options. Drop files onto the zone or click to browse.
Accepted types: image/*, .pdf, .txt, .json.
Maximum 5 files. Duplicates are skipped.
<link rel="stylesheet" href="hcg-file-drop.css">
<div id="upload-container"></div>
<script src="hcg-file-drop.js"></script>
<script>
const uploader = hcgFileDrop(
document.getElementById('upload-container'),
{
allowedTypes: ['image/*', '.pdf', '.txt', '.json'],
maxFiles: 5,
showFileList: true,
onFilesChange: (files) => {
console.log(files);
},
}
);
</script>
The callback receives file entries whenever the list changes. Each entry includes
name, type, size, and the original file object.
Upload files to see the result here.
hcgFileDrop(container, {
onFilesChange: (files) => {
if (files.length === 0) return;
files.forEach((entry) => {
console.log(entry.name, entry.type, entry.size);
// entry.file is the original File object for FormData upload
});
},
});
Store the returned instance and call its methods to clear files or toggle the disabled state.
const files = uploader.getFiles();
uploader.reset();
uploader.disable();
uploader.isDisabled(); // true
uploader.enable();
uploader.destroy();