JSFiddle - React, Tailwind, and code Playground

HTML

<div id="dnd">DROP!</div>
<input id="dirinput" multiple="" directory="" type="file" />
<br/><br/>
<div id="output"></div>

CSS

#dnd {
    border:10px solid black;
    text-align:center;
    padding:10px;
    width:400px;
    height:100px;
    margin:auto;
    font-size:40px;
    display:inline-block;
}

#output {
    background-color:#FFFACD;/*FFFFCC*/
}

JavaScript

var dnd = document.getElementById("dnd");
dnd.ondragover = function(e) {e.preventDefault()}
dnd.ondrop = function(e) {
	e.preventDefault();
	
	var transfer = e.dataTransfer;
	
	if(transfer.getFilesAndDirectories){
		handleFirefoxUpload(transfer);
	}
}

function handleFirefoxUpload(transfer){
	var promise = transfer.getFilesAndDirectories();
	promise.then(function(files){
		log("dropped items: " + files.length);
		for (var i=0, arrSize=files.length; i < arrSize; i++) {
			var file = files[i];
			iterateFilesAndDirs(file);
		}
	})
}

function log(msg){
	var infoField = document.getElementById("output");
    infoField.innerHTML += "<br/>";
    infoField.innerHTML += msg;
}

function iterateFilesAndDirs(file){
	if (file instanceof Directory) {
		var promise = file.getFilesAndDirectories()
		promise.then(function(subfiles){
			for (var i=0, arrSize=subfiles.length; i < arrSize; i++) {
				var subfile = subfiles[i];
				iterateFilesAndDirs(subfile);
			}
		})
	}
	else if (file instanceof File){
		upload(file);
	}
	else {
		console.log("unknown file type: " + (typeof file));
	}
}

function upload(file) {    
	log("uploading file=" + file.name + ", size=" + file.size);
}

var dirinput = document.getElementById("dirinput");
dirinput.addEventListener("change", function (e) {
    if ('getFilesAndDirectories' in this) {
      this.getFilesAndDirectories().then(function(filesAndDirs) {
          for (var i=0, arrSize=filesAndDirs.length; i < arrSize; i++) {
              iterateFilesAndDirs(filesAndDirs[i]);
          }
      });
    }
    else {
        var files = e.target.files;
        for (var i=0, arrSize=files.length; i < arrSize; i++) {
              upload(files[i]);
          }
    }
}, false);