关于前端:记录浏览器读取文件夹中的文件内容windowshowDirectoryPicker

31次阅读

共计 1331 个字符,预计需要花费 4 分钟才能阅读完成。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button id="btn"> 抉择文件夹 </button>
</body>
</html>
<script>
// https://developer.mozilla.org/en-US/docs/Web/API/Window/showDirectoryPicker
const btnDom = document.getElementById("btn")
btnDom.onclick =async () =>{
    try {const directory =await window.showDirectoryPicker()
        const root = await processDirectory(directory)
        await renderAllFile(root)
    } catch (error) {console.error(error)
    }
}
const fileKind = 'file'
const processDirectory =async (directory) => {if(directory.kind === fileKind){return directory}
    directory.children = []
    const iter = directory.entries()
    for await (const item of iter) {directory.children.push(await processDirectory(item[1]))
    }
    return directory
}
const renderAllFile =async (root) => {const rootType =Array.isArray(root)
    const rootfiles = rootType ? root : [root]
    for (let i = 0;i < rootfiles.length; i++) {const rootItem = rootfiles[i]
        if(rootItem.kind === fileKind){await readerFile(rootItem)
        }
        if((rootItem?.children || [])?.length){await renderAllFile(rootItem?.children)
        }
    }
}
const readerFile =async (fileHandle) => {const file = await fileHandle.getFile()
    const render = new FileReader()
    render.onload = (e) => {
        const fileText = e.target.result
        console.log(file.name,fileText);
    }
    render.readAsText(file, 'utf-8')
}
</script>

正文完
 0