前端 实现浏览器读写本地文件(适配HTML,VUE,react)
1. 读取本地文件
方法1:
1. 使用input标签获取本地文件对象file(vue格式)
2. 接收回调处理获取到的文件数据
// 使用前端原生组件回调获取文件 selectFail(event) { // 获取文件对象 const file = event.target.files[0]; if (file) { const reader = new FileReader(); reader.onload = (e) => { // 解析文件内容 try { this.msg = e.target.result } catch (err) { console.log('无法解析文件', err) } }; } }
方法2
1. 使用浏览器API:window.showOpenFilePicker,注意文件选择 必须由用户的 交互动作 触发,不能直接调用
读取本地文件
2. 获取文件对象并处理数据
// 调用浏览器方法获取文件对象 async selectFail2() { try { // 获取当前选择的文件 const [fileHandle] = await window.showOpenFilePicker(); // 存储当前选择的文件(用户后续直接保存时直接找到被保存的对应文件) this.fileHandle = fileHandle // 获取文件内容 const file = await this.fileHandle.getFile(); const contents = await file.text(); this.msg = contents; } catch (error) { console.error('无法选择文件', error); } }
2. 保存(修改原文件内容)
保存
// 保存文件 async saveFail() { // (对之前获取的文件)执行写入操作 const writable = await this.fileHandle.createWritable(); // 写入内容:this.msg await writable.write(this.msg); // 写入结束 await writable.close(); }
3. 另存为
另存为
// 另存为 async saveAsFail() { // 新建文件参数 const opts = { type: 'save-file', // 指定文件选择器的类型,'save-file' 表示文件选择器用于 保存文件 accepts: [{ description: 'Text file', // 在文件选择器中显示文件类型的名称 extensions: ['txt'], // 文件拓展名 mimeTypes: ['text/plain'], // 文件的 MIME 类型 }] }; // 新建文件 const fileHandle = await window.showSaveFilePicker(opts); // 对新建的文件执行写入操作 const writable = await fileHandle.createWritable(); // 写入内容:this.msg await writable.write(this.msg); // 写入结束 await writable.close(); }
4. 完整代码及演示
读取本地文件 保存 另存为 export default { data() { return { msg: '', // 展示读取的文件内容 fileHandle: null, // 当前正在处理的文件句柄(可以理解为正在处理的文件) } }, methods: { // 文件上传方法1 selectFail(event) { const file = event.target.files[0]; if (file) { const reader = new FileReader(); reader.onload = (e) => { try { this.msg = e.target.result; } catch (err) { console.log('无法解析JSON文件', err) } }; reader.readAsText(file); } }, // 文件上传方法2 async selectFail2() { try { const [fileHandle] = await window.showOpenFilePicker(); this.fileHandle = fileHandle const file = await this.fileHandle.getFile(); const contents = await file.text(); this.msg = contents; } catch (error) { console.error('无法选择文件', error); } }, // 保存文件 async saveFail() { const writable = await this.fileHandle.createWritable(); await writable.write(this.msg); await writable.close(); }, // 另存为 async saveAsFail() { const opts = { type: 'save-file', accepts: [{ description: 'Text file', extensions: ['txt'], mimeTypes: ['text/plain'], }] }; // 新建文件的句柄 const fileHandle = await window.showSaveFilePicker(opts); const writable = await fileHandle.createWritable(); await writable.write(this.msg); await writable.close(); } } }
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。