当前位置: 首页 > news >正文

【前端/js】使用js读取本地文件(xml、二进制)内容

目录

  • 说在前面
  • FileReader
  • DOMParser
  • 文本文件
  • 二进制文件

说在前面

  • 浏览器版本:Microsoft Edge 126.0.2 (正式版本) (64 位)

FileReader

  • MDN
  • FileReader 接口允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 FileBlob 对象指定要读取的文件或数据。

DOMParser

  • MDN
  • DOMParser 可以将存储在字符串中的 XMLHTML 源代码解析为一个 DOM Document

文本文件

  • xml文件为例
  • vue
    <script setup>function btnClick() {document.getElementById("file1").click()
    }function openFile(e) {var file = e.target.files[0]var reader = new FileReader()reader.onload = function(e) {var content = e.target.resultvar parser = new DOMParser()var xmlDoc = parser.parseFromString(content, "text/xml")console.log(xmlDoc)}reader.readAsText(file)
    }
    </script><template><button @click="btnClick">Open</button><input id="file1" type="file" style="display:none" @change="openFile">
    </template>
    
  • 结果
    在这里插入图片描述

二进制文件

  • navmesh为例
    <script setup>
    import * as THREE from 'three';
    import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
    import {init as initRecastNavigation,NavMeshQuery,
    } from '@recast-navigation/core';
    import { generateSoloNavMesh } from '@recast-navigation/generators';
    import { DebugDrawer, getPositionsAndIndices } from '@recast-navigation/three';
    import { exportNavMesh, importNavMesh } from 'recast-navigation';// initialise recast-navigation
    initRecastNavigation();// setup scene
    const renderer = new THREE.WebGLRenderer();
    document.body.appendChild(renderer.domElement);const scene = new THREE.Scene();
    const camera = new THREE.PerspectiveCamera();
    camera.position.set(10, 10, -10);const orbitControls = new OrbitControls(camera, renderer.domElement);// handle resizing
    const onWindowResize = () => {camera.aspect = window.innerWidth / window.innerHeight;camera.updateProjectionMatrix();renderer.setSize(window.innerWidth, window.innerHeight);
    };
    onWindowResize();window.addEventListener('resize', onWindowResize);// animate
    const animate = () => {requestAnimationFrame(animate);renderer.render(scene, camera);
    };animate();function btnClick() {document.getElementById('file1').click();
    }function openBinFile(e) {var file = e.target.files[0];var reader = new FileReader();reader.onload = function (e) {var content = new Uint8Array(e.target.result);const { navMesh } = importNavMesh(content);const debugDrawer = new DebugDrawer();debugDrawer.drawNavMesh(navMesh);scene.add(debugDrawer);console.log(content);};reader.readAsArrayBuffer(file);
    }
    </script><template><button @click="btnClick">Open</button><input id="file1" type="file" style="display: none" @change="openBinFile" />
    </template>
    
  • 结果
    在这里插入图片描述
http://www.lryc.cn/news/409482.html

相关文章:

  • 初步入门C ++之类的概念
  • 什么是技术作家风格指南?
  • WebGIS学习——Cesium|Javascript
  • Qt,获取其他.exe文件的标准输出流的信息(printf/print的输出信息)
  • LeetCode 热题 HOT 100 (010/100)【宇宙最简单版】
  • Ubuntu24.04安装mysql-server小计,解决mysql_secure_installation时不能重置密码的问题
  • unity3d:TabView,UGUI多标签页组件,TreeView树状展开菜单
  • go语言map底层及扩容机制原理详解(下)
  • 网络协议二 : 使用Cisco Packet Traceer工具模拟网络环境,集线器,网桥,交换机,路由器,IP,同一网段
  • Aria2 任意文件写入漏洞
  • 成为git砖家(4): git status 命令简介
  • 2-48 基于matlab的EM算法聚类可视化程序
  • k8s 使用技巧
  • 学习笔记-系统框图传递函数公式推导
  • C++ - 基于多设计模式下的同步异步⽇志系统
  • git 相关内容
  • ElasticSearch(es)倒排索引
  • 【自然语言处理】概论(一):自然语言处理概要
  • flask 开始
  • 仕考网:公务员可以报考军队文职吗?
  • Java整理22
  • leetcode 408周赛 3234. 统计 1 显著的字符串的数量
  • 容器对比虚拟机有哪些不足?
  • C# 归并排序
  • 【请求代理】springboot单机服务基于过滤器Filter实现第三方服务器接口请求代理功能
  • .NET Core异步编程与多线程解析:提升性能与响应能力的关键技术
  • Photoshop(PS) 抠图简单教程
  • 项目管理中的常用工件(二):可视化工件
  • Git入门与实战:版本控制的艺术
  • [Mysql-DML数据操作语句]