Javascript 如何判断删除的文件是否为文件夹?

Javascript 如何判断删除的文件是否为文件夹?,javascript,Javascript,我有一个元素,可以像这样把东西放在上面 var div = document.createElement("div"); div.addEventListener("drop", (e)=>{ e.preventDefault(); if (!(("dataTransfer" in e) && ("files" in e.dataTransfer))) return; for (var i = 0; i < e.dataTransfer.fil

我有一个元素,可以像这样把东西放在上面

var div = document.createElement("div");
div.addEventListener("drop", (e)=>{
    e.preventDefault();
    if (!(("dataTransfer" in e) && ("files" in e.dataTransfer))) return;
    for (var i = 0; i < e.dataTransfer.files.length; i++) {
        var file = e.dataTransfer.files[i];
        //    magical check whether the file is a folder?
        upload_file(file);
    }
});
var div=document.createElement(“div”);
div.addEventListener(“删除”,(e)=>{
e、 预防默认值();
如果(!((“数据传输”在e中)和((“文件”在e.dataTransfer))返回;
对于(var i=0;i
问题是,文件夹在FileList对象中的显示方式是相同的,并且在您尝试使用FileReader读取它们之前,它们似乎与文件无法区分

它们的大小似乎与文件来自的任何驱动器的集群大小完全相同,它们没有类型,但对于任何不常见的文件扩展名也是如此。当您尝试使用FileReader读取它们时,甚至连onload都不会被触发

我可以尝试使用某种超时机制进行测试读取,以检测它不是一个文件,但这似乎是一种肮脏的方法,在将来的任何浏览器更新中都会导致错误


有没有其他方法可以确定所提供的文件实际上不是文件?

在广泛的搜索中,我找到的唯一实际选择是使用edge、chrome和ff支持的实验性功能

对于我的实现,在呈现页面之前,我执行此测试以检查是否允许删除:

browser_support_drop() {
    if (typeof DragEvent !== "function") return false;
    if (!("dataTransfer" in DragEvent.prototype)) return false;
    if (typeof DataTransferItem !== "function") return false;
    if (!("webkitGetAsEntry" in DataTransferItem.prototype) && !("getAsEntry" in DataTransferItem.prototype)) return false;
    return true;
}
然后在放置处理程序中(如果适用)

handle\u drop(e){
var项目=[];
对于(var i=0;i
为什么要检查?您希望只允许上载文件,或者只允许在其文件夹中执行其他操作?这主要是因为如果您无法读取文件夹,您实际上无法上载该文件夹,它只会在没有任何错误或警告的情况下阻塞系统。请注意,当您尝试读取此文件夹时,您的文件阅读器上应该会触发一个错误。
handle_drop(e) {
    var items = [];
    for (var i = 0; i < e.dataTransfer.items.length; i++) {
        var item = e.dataTransfer.items[i];
        if (item.kind !== "file") continue;
        var entry = "getAsEntry" in DataTransferItem.prototype ? item.getAsEntry() : item.webkitGetAsEntry();
        if (entry.isDirectory) continue;
        items.push(item.getAsFile());
    }
    this.handle_files_added(items);
}