我想要一个输入字段,让你选择一个文件夹。然后使用 html5 目录读取器 api 递归读取其中的所有文件和文件夹。
有谁知道任何专门这样做的教程?我这里有代码,但它不起作用,它在读取时总是列出空数组。
<input type="file" id="filepicker" name="fileList" webkitdirectory directory />
<button id="ff">Read</button>
<ul id="filelist"></ul>
.js
function toArray(list) {
return Array.prototype.slice.call(list || [], 0);
}
function listResults(entries) {
// Document fragments can improve performance since they're only appended
// to the DOM once. Only one browser reflow occurs.
var fragment = document.createDocumentFragment();
entries.forEach(function(entry, i) {
var img = entry.isDirectory ? '<img src="folder-icon.gif">' :
'<img src="file-icon.gif">';
var li = document.createElement('li');
li.innerHTML = [img, '<span>', entry.name, '</span>'].join('');
fragment.appendChild(li);
});
document.querySelector('#filelist').appendChild(fragment);
}
function onInitFs(fs) {
var dirReader = fs.root.createReader();
var entries = [];
// Call the reader.readEntries() until no more results are returned.
var readEntries = function() {
dirReader.readEntries (function(results) {
if (!results.length) {
listResults(entries.sort());
} else {
entries = entries.concat(toArray(results));
readEntries();
}
}, errorHandler);
};
readEntries(); // Start reading dirs.
}
function errorHandler(e) {
var msg = '';
switch (e.code) {
case DOMError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case DOMError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case DOMError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case DOMError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case DOMError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
console.log('Error: ' + msg);
}
document.getElementById("ff").addEventListener("click", function() {
var selectedFiledf = $("#filepicker").val();
window.webkitRequestFileSystem(selectedFiledf, 1024*1024, onInitFs, errorHandler);
});
您可以将一个函数附加到文件输入的 onchange 事件。调用此函数时,您将能够通过访问 event.target.files
来访问文件列表。然后,当用户按"读取"按钮时,可以处理文件。
var files;
document.getElementById("filepicker").addEventListener("change", function(event) {
files = event.target.files;
}, false);
本指南可能有用: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory