web前端之JavaScript选择文件和文件夹、全程使用WebApi操作文件、不涉及html、showOpenFilePicker、showDirectoryPicker

这篇具有很好参考价值的文章主要介绍了web前端之JavaScript选择文件和文件夹、全程使用WebApi操作文件、不涉及html、showOpenFilePicker、showDirectoryPicker。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


选择文件

此方式不需要创建多余的html标签,非常适合项目开发中使用。文章来源地址https://www.toymoban.com/news/detail-828598.html

<button onclick="readFile()">选择文件</button>

<script>
// 不支持xlsx/docx等微软文件格式
async function readFile() {
	try {
		// 读取文件
		const [fileHandle] = await window.showOpenFilePicker();
		const file = await fileHandle.getFile();
		
		let reader = new FileReader();
		
		reader.onload = ({ target: { result } }) => {
		console.log(`-------输出结果-------\n${result}`);
		}
		
		reader.readAsText(file, 'utf-8');
	} catch (error) {
		console.error('Error selecting file:', error);
	}
}
</script>

选择文件夹

<button onclick="chooseFolder()">选择文件夹</button>

<script>
// 选择文件
async function chooseFolder() {
	try {
		let handle = await showDirectoryPicker(),
		root = await processHandle(handle);
		
		for(let i = 0;i < root.child.length; i++) {
			readFile(root.child[i])
		}
	} catch (error) {
		console.log(error);
		// 用户拒绝的处理
	}
}

// 解析文件夹
async function processHandle(handle) {
    if (handle.kind === 'file') return handle;

    handle.child = [];
    // 得到异步迭代器
    let iter = handle.entries();

    for await (let item of iter) {
        handle.child.push(await processHandle(item[1]));
    }

    return handle;
}

// 读取文件内容
function readFile(fileHandle) {
	let file = await fileHandle.getFile(),
		reader = new FileReader();
	
	reader.onload = ({ target: { result } }) => {
		console.log(result);
	}
	
	reader.readAsText(file, 'utf-8');
	
	// kind: "directory" 表示选择的是文件
	// name: "aText" 文件名字
}
</script>

完整版

<div class="p_20 bs_bb">
    <div class="bs_bb p_10 d_f jc_se bc_rgba_68_68_86_05">
        <button class="fs_30 cursor_pointer" onclick="chooseFile()">选择文件</button>
        <button class="fs_30 cursor_pointer ml_20" onclick="chooseFolder()">选择文件夹</button>
    </div>
</div>

<script>
    // 选择文件
    async function chooseFile() {
        // 创建用于存放文件句柄的变量
        let fileHandle = undefined;
        // 打开文件选择器,解构返回的数组中的第一个元素
        [fileHandle] = await window.showOpenFilePicker();

        readFile(fileHandle);
    }

    // 选择文件夹
    async function chooseFolder() {
        try {
            let handle = await showDirectoryPicker(),
                root = await processHandle(handle);

            for (let i = 0; i < root.child.length; i++) readFile(root.child[i]);
        } catch (error) {
            // 用户拒绝的处理
            console.log(error);
        }
    }

    // 解析文件夹
    async function processHandle(handle) {
        if (handle.kind === 'file') return handle;

        handle.child = [];
        // 得到异步迭代器
        let iter = handle.entries();

        for await (let item of iter) {
            handle.child.push(await processHandle(item[1]));
        }

        return handle;
    }

    // 获取文件内容
    async function readFile(fileHandle) {
        let file = await fileHandle.getFile(),
            reader = new FileReader();

        reader.onload = ({ target: { result } }) => {
            console.log(`-------输出结果-------\n${result}`);
        }

        reader.readAsText(file, 'utf-8');

        // kind: "directory" 表示选择的是文件
        // name: "aText" 文件名字
    }
</script>

到了这里,关于web前端之JavaScript选择文件和文件夹、全程使用WebApi操作文件、不涉及html、showOpenFilePicker、showDirectoryPicker的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • winform 使用CommonOpenFileDialog选择文件夹或文件

    选择文件夹 选择文件 注:需要添加引用 using Microsoft.WindowsAPICodePack.Dialogs; 一、C#通过CommonOpenFileDialog创建文件夹更美观 二、通过nuGet加载dll 首先,打开VS2019,通过菜单栏中的“工具”菜单  然后搜索 WindowsAPICodePack,完成安装。

    2024年02月13日
    浏览(40)
  • Unity C# 打开windows对话框选择文件夹或选择文件

    unity没有提供打开windows对话框的api,在开发种也会遇到选择系统文件夹或选择系统文件的需求

    2024年04月26日
    浏览(50)
  • qt通过QFileDialog获取文件路径&保存文件&选择文件夹

            QT是一款常用的UI设计工具, 我们在日常开发中经常需要对文件或者文件夹进行操作,下面将介绍QT对于获取文件路径保存文件选择文件夹等场景的获取的伪代码.  注:适用于各语言的QT,比如python的pyQT之类的 保存文件: 根据指定文件夹找对应文件: 另存为:

    2024年02月06日
    浏览(61)
  • JavaScript 打开本地文件夹的N种方法

    方法一 通过ActiveXObject对象 比如打开C盘: 方法二 设置一个不可见的input标签,通过input上面的webkitdirectory 属性打开本地文件,我写的是vue3用法: 方法三 设置一个不可见的input标签,通过input上面的multiple 属性打开本地文件,我写的是vue3用法:这个属性与webkitdirectory 的具体

    2024年02月15日
    浏览(39)
  • python pyqt5 如何点击按钮,打开文件夹选择目录

    您可以使用PyQt5的QFileDialog类来实现打开文件夹选择目录的功能。下面是一个示例代码,演示了如何创建一个窗口,包含一个按钮,点击按钮后弹出文件夹选择对话框并返回所选目录的路径: import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QFileDialog class MainWindow(Q

    2024年02月10日
    浏览(64)
  • Zip压缩文件夹 + 前端导出

    2024年03月21日
    浏览(54)
  • 前端上传文件夹或文件至后端(SpringBoot)

    前端上传文件夹使用的是 input 标签的file属性,最重要的是 webkitdirectory 这个属性,有了这个属性之后input才可以选择文件夹,但也只能选择文件夹了。 在webkitdirectory的官方文档里有对该属性的说明。 我们可以在这基础上做延伸,做一个表单来上传文件夹: form要加上 enctype=“

    2024年02月05日
    浏览(57)
  • Nginx部署前端dist文件夹

    nginx部署dist包_墨寒ice的博客-CSDN博客_nginx dist nginx服务器部署dist文件夹 - 菜鸟学院 (noobyard.com) nginx 部署 dist 文件 - 懒惰ing - 博客园 (cnblogs.com) 1.下载Nginx的压缩包(tar.gz) ​ 1.本地下载上传nginx: download ​ 2.wget命令下载 wget -c https://nginx.org/download/nginx-1.20.1.tar.gz 2.配置安装Ngi

    2024年02月08日
    浏览(33)
  • vue前端传递文件夹以及其他参数到后台

    前端 1、前端通过FormData进行传递,代码如下 后端 2、后端通过如下方式进行接收和解析 注意:如果后端接收不到数据,或者前端没有执行请求方法,考虑可能是定义的函数名冲突导致,更改函数名重试即可 可能需要的方法

    2024年03月23日
    浏览(49)
  • 文心一言vs通义千问 之前端文件夹命名

    今天心血来潮想试试国内百度和腾讯的AI在解决前端难题–文件命名方面的效果。 如下: 综上,是百度会更贴近一些哈 大伙有什么命名的好工具嘛?

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包