Вы не можете положиться на file.type
.Файл без расширения будет иметь тип ""
.Сохраните текстовый файл с расширением .jpg
и загрузите его в элемент управления файлом, и его тип будет отображаться как image/jpeg
.И папка с именем "someFolder.jpg" также будет иметь тип image/jpeg
.
. Попробуйте прочитать файл с FileReader
.Если каталог перетаскивается, FileReader
вызовет событие error
:
var reader = new FileReader();
reader.onload = function (e) {
// it's a file
};
reader.onerror = function (e) {
// it's a directory
};
reader.readAsText(file);
К счастью, в IE11 при удалении каталога коллекция e.dataTransfer.files
пуста.
Chrome предоставляет дополнительное свойство в e.dataTransfer
, называемое items
, содержащее коллекцию DataTransferItem
объектов.Для каждого из этих объектов вы можете вызвать item.webkitGetAsEntry()
, который возвращает объект Entry
.Объект Entry
имеет свойства isDirectory
и isFile
:
// Chrome only
if (e.dataTransfer.items && e.dataTransfer.items.length) {
[].forEach.call(e.dataTransfer.items, function(item) {
var entry = item.webkitGetAsEntry();
if (entry && entry.isFile) {
var file = item.getAsFile(); // same as object in e.dataTransfer.files[]
// do something with the file
}
}
}
Интересно, что в моих экспериментах каждая папка, на которую я смотрел, имела File.size % 4096
как ноль.Однако, конечно, некоторые файлы будут иметь это.File.size
не является надежным индикатором того, является ли файл фактически папкой.