页面
<template> <div> <input type="file" @change="handleFileUpload" accept=".pcd" /> <input type="file" @change="changeFile" /> <div @click="stringToFileClick">测试string转file</div> <div ref="viewer"></div> </div> </template>
js部分
<script> import * as THREE from 'three'; import { PCDLoader } from 'three/examples/jsm/loaders/PCDLoader.js' // 注意是examples/jsm // 本地上传pcd文件预览 export default { data() { return { pointCloud: null, }; }, mounted(){ // 使用例子 // const input = this.stringToFile('Hello, World!', 'message.txt', 'text/plain'); // document.body.appendChild(input); // 如果需要将input添加到DOM中 }, methods: { handleFileUpload(file) { // const file = event.target.files[0]; console.log(file) if (!file) return; const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); this.$refs.viewer.innerHTML = ''; this.$refs.viewer.appendChild(renderer.domElement); camera.position.z = 5; const loader = new PCDLoader(); console.log(URL.createObjectURL(file)) loader.load(URL.createObjectURL(file), (loadedPointCloud) => { if (this.pointCloud) { scene.remove(this.pointCloud); } this.pointCloud = loadedPointCloud; scene.add(this.pointCloud); const animate = () => { requestAnimationFrame(animate); renderer.render(scene, camera); }; animate(); }); }, changeFile(event){ console.log('event----------------------aaa') // console.log(event.target.files[0]) let that = this; const file = event.target.files[0]; const reader = new FileReader(); reader.onload = (e) => { console.log('pcdData--------aaaaaa--------------bbb'); var byteArray = new Uint8Array(e.target.result.length); for (var i = 0; i < e.target.result.length; i++) { byteArray[i] = e.target.result.charCodeAt(i); // console.log(byteArray[i]) } console.log(byteArray.buffer); console.log(e.target.result.length); // console.log(typeof e.target.result); this.stringToFile(byteArray.buffer, 'message.pcd', 'application/octet-stream'); // this.stringToFile(e.target.result, 'message.pcd', 'application/octet-stream'); // this.stringToFile(e.target.result, 'tasks (1).html','text/html'); }; reader.readAsBinaryString(file); // reader.readAsArrayBuffer(file); }, stringToFileClick(){ this.stringToFile('Hello, World!', 'message.txt', 'text/plain'); }, stringToFile(content, fileName, mimeType) { // 创建一个Blob对象,类型为mimeType const blob = new Blob([content], { type: mimeType }); // const blob = new Blob([content]); // 创建一个File对象 const file = new File([blob], fileName, { type: mimeType, lastModified: new Date().getTime(), // 或者使用其他适当的时间戳 }); this.handleFileUpload(file) console.log(file) // // // 创建一个隐藏的input元素 // const input = document.createElement('input'); // input.type = 'file'; // input.style.display = 'none'; // // 触发一个点击事件来设置文件 // input.addEventListener('change', () => { // // 当input改变时,设置文件 // const dataTransfer = new DataTransfer(); // dataTransfer.items.add(file); // input.files = dataTransfer.files; // }); // // 触发点击事件 // input.click(); // // 返回input元素,以便可以在需要时添加到DOM中 // return input; } }, }; </script>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2018-10-08 如何去掉IE文本框后的那个X css代码
2018-10-08 解决input 有readonly属性 各个浏览器的光标兼容性问题