uni-app 读取.dat文件数据为arraybuffer

本文介绍了一种使用plus.io.FileReader()将本地文件读取为URL编码格式,并进一步转换为Base64字符串的方法。通过uni.base64ToArrayBuffer()函数,Base64字符串可以被转化为arrayBuffer格式,便于进行后续的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为plus.io.FileReader()只提供了readAsDataURLreadAsText两种方法,所以需要将文件读取为URL编码格式,再转为base64字符串,通过uni.base64ToArrayBuffer方法转为arrayBuffer。

getFileInfo() {
    var _this = this;
	plus.io.resolveLocalFileSystemURL(_this.fileList[0].filePath,function(entry) {
	    //读取文件  
	    entry.file(function(file) {
		    var reader = new plus.io.FileReader();
		    reader.readAsDataURL(file); // 以URL格式读取文件
		    reader.onload = function() { 
		        let base64 = this.result.split(',')[1]; // 获取base64字符串
		        const arrayBuffer = uni.base64ToArrayBuffer(base64); // 转换为arrayBuffer格式
		        const int8array = new Int8Array(arrayBuffer);
		    };
	    });
    })
}

希望官方能尽快增加这个API吧。

### 解决 Uni-app 加载 GLB 模型文件时遇到的错误 #### 配置静态资源路径 当在 Uni-app 中使用 Three.js 或其他 3D 渲染引擎加载 `.glb` 文件时,可能会遇到 `Fetch API cannot load file:///static/glb/YZQ_AGV.glb. URL scheme "file" is not supported.` 的错误提示[^2]。这通常是因为应用尝试通过本地文件协议 (`file://`) 访问资源。 为了修正此问题,建议将模型放置于项目的 `/static/` 目录下,并确保引用路径正确无误。对于 HBuilderX 创建的应用程序来说,可以通过如下方式设置: ```json { "path": "/static/models/YZQ_AGV.glb" } ``` #### 修改网络请求权限 某些情况下,特别是在 Android 设备上,可能还需要调整 manifest.json 文件中的 networkSecurityConfig 设置来允许访问本地存储的文件: ```xml <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system"/> </trust-anchors> </base-config> </network-security-config> ``` #### 处理不同平台差异 考虑到 uni-app 是一个多端框架,在不同的平台上表现可能存在细微差别。特别是针对微信小程序环境下的兼容性处理尤为重要。如果仅能在特定版本的小程序环境中正常工作,则可能是由于基础库更新引起的变化所致[^3]。此时应考虑降级至稳定版的基础库或等待官方修复。 另外,对于 Vue 组件形式封装好的插件如 vue-3d-model ,尽管可以在桌面浏览器环境下良好运作,但在移动端尤其是 iOS 上却会出现异常情况[^4]。因此推荐直接集成原生 three.js 而不是依赖第三方组件来进行开发。 #### 使用 XHRLoader 替代默认加载器 Three.js 默认使用的 FileLoader 可能会在跨域资源共享(CORS)方面存在问题。改用 XHRLoader 并指定响应类型为 arraybuffer 可以有效规避此类难题: ```javascript import {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader'; const loader = new GLTFLoader().setCrossOrigin('anonymous'); loader.load('/static/models/YZQ_AGV.glb', function (gltf){ scene.add(gltf.scene); }, undefined, function(error){ console.error(error); }); ``` #### 添加懒加载配置 最后不要忘记按照文档说明给 app.json 增加 `"lazyCodeLoading": "requiredComponents"` 这样的字段以便更好地支持按需加载特性[^5]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值