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

打印 上一主题 下一主题

主题 853|帖子 853|积分 2559

说在前面

   

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



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



  • MDN
  • DOMParser 可以将存储在字符串中的 XML 或 HTML 源代码解析为一个 DOM Document。
文本文件



  • 以xml文件为例
  • vue
    1. <script setup>
    2. function btnClick() {
    3.   document.getElementById("file1").click()
    4. }
    5. function openFile(e) {
    6.   var file = e.target.files[0]
    7.   var reader = new FileReader()
    8.   reader.onload = function(e) {
    9.     var content = e.target.result
    10.     var parser = new DOMParser()
    11.     var xmlDoc = parser.parseFromString(content, "text/xml")
    12.     console.log(xmlDoc)
    13.   }
    14.   reader.readAsText(file)
    15. }
    16. </script>
    17. <template>
    18.   <button @click="btnClick">Open</button>
    19.   <input id="file1" type="file" style="display:none" @change="openFile">
    20. </template>
    复制代码
  • 结果

二进制文件



  • 以navmesh为例
    1. <script setup>
    2. import * as THREE from 'three';
    3. import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
    4. import {
    5.   init as initRecastNavigation,
    6.   NavMeshQuery,
    7. } from '@recast-navigation/core';
    8. import { generateSoloNavMesh } from '@recast-navigation/generators';
    9. import { DebugDrawer, getPositionsAndIndices } from '@recast-navigation/three';
    10. import { exportNavMesh, importNavMesh } from 'recast-navigation';
    11. // initialise recast-navigation
    12. initRecastNavigation();
    13. // setup scene
    14. const renderer = new THREE.WebGLRenderer();
    15. document.body.appendChild(renderer.domElement);
    16. const scene = new THREE.Scene();
    17. const camera = new THREE.PerspectiveCamera();
    18. camera.position.set(10, 10, -10);
    19. const orbitControls = new OrbitControls(camera, renderer.domElement);
    20. // handle resizing
    21. const onWindowResize = () => {
    22.   camera.aspect = window.innerWidth / window.innerHeight;
    23.   camera.updateProjectionMatrix();
    24.   renderer.setSize(window.innerWidth, window.innerHeight);
    25. };
    26. onWindowResize();
    27. window.addEventListener('resize', onWindowResize);
    28. // animate
    29. const animate = () => {
    30.   requestAnimationFrame(animate);
    31.   renderer.render(scene, camera);
    32. };
    33. animate();
    34. function btnClick() {
    35.   document.getElementById('file1').click();
    36. }
    37. function openBinFile(e) {
    38.   var file = e.target.files[0];
    39.   var reader = new FileReader();
    40.   reader.onload = function (e) {
    41.     var content = new Uint8Array(e.target.result);
    42.     const { navMesh } = importNavMesh(content);
    43.     const debugDrawer = new DebugDrawer();
    44.     debugDrawer.drawNavMesh(navMesh);
    45.     scene.add(debugDrawer);
    46.     console.log(content);
    47.   };
    48.   reader.readAsArrayBuffer(file);
    49. }
    50. </script>
    51. <template>
    52.   <button @click="btnClick">Open</button>
    53.   <input id="file1" type="file" style="display: none" @change="openBinFile" />
    54. </template>
    复制代码
  • 结果


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表