Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查所选文件是目录文件还是常规文件?_Javascript_Html_Dom - Fatal编程技术网

Javascript 如何检查所选文件是目录文件还是常规文件?

Javascript 如何检查所选文件是目录文件还是常规文件?,javascript,html,dom,Javascript,Html,Dom,我有以下文件输入: const file=document.getElementById('file'); addEventListener('change',e=>{ console.log(e.target.files[0]); }); 您应该为输入标记提供附加属性 <input id="file" type="file" webkitdirectory directory multiple /> 然后,更改事件将为您提供文件夹中所有文件的信息,文件对象中包含文件路径(但

我有以下文件输入:

const file=document.getElementById('file');
addEventListener('change',e=>{
console.log(e.target.files[0]);
});

您应该为输入标记提供附加属性

<input id="file" type="file" webkitdirectory directory multiple />


然后,更改事件将为您提供文件夹中所有文件的信息,文件对象中包含文件路径(但不包含文件夹本身)。

可以使用“webkitGetAsEntry”方法检测目录,但该方法不受广泛支持
const file=document.getElementById('file');
addEventListener('change',e=>{
console.log(e.target.files[0]);
});
文件.addEventListener('drop',onDrop);
函数onDrop(e){
e、 预防默认值();
e、 停止传播();
var items=e.dataTransfer.items;
var files=e.dataTransfer.files;
var结果=[];
对于(变量i=0,项;项=项[i];+i){
var entry=item.webkitGetAsEntry();
var obj={
name:entry.name,
isDirectory:entry.isDirectory,
isFile:entry.isFile
}
结果:推送(obj);
}
控制台日志(结果);
返回结果;
}

选择目录时,文件阅读器无法读取其内容,因此会产生错误。下面是一个如何为上传实现文件验证程序的示例

这个例子完全支持所有现代浏览器

const input=document.querySelector('input'))
input.onchange=(e)=>{
const file=input.files[0]
isThisAFile(文件)
.then(validFile=>console.log('Woohoo!得到一个文件:',validFile))
.catch(error=>console.log('Bummer,看起来像dir:',file,error))
}
函数isThisAFile(maybeFile){
返回新承诺(功能(解决、拒绝){
如果(maybeFile.type!=''){
返回解析(maybeFile)
}
const reader=new FileReader()
reader.onloadend=()=>{
if(reader.error&&reader.error.name==='NotFoundError'){
返回拒绝(reader.error.name)
}
解析(maybeFile)
}
reader.readAsBinaryString(maybeFile)
})
}

文件

检查
类型
字段中的目录,它是空的
类型
字段不起作用,因为如果上载的
自述文件没有扩展名,它仍然是空的。该大小可能不起作用,因为它在空文件上也是0,而不仅仅是文件夹。我预计a在目录上会失败,虽然我没有尝试过,但您可以要求用户不要上传空文件并检查
size>0
,但是这在IE11中不起作用,只有Safari>=11,另请参见您可以执行
fileInput.webkitEntries
以查看类似的结果这是公认的答案,因为所有现代浏览器都支持此方法,并且无论它来自何处,它都适用于每个
Blob
对象。感谢@apokryfos在注释中首先指出此方法。此方法不适用于大文件。它们将提供一个错误,并将被视为文件夹。这可以使用
if(reader.error&&reader.error.name=='NotFoundError')