Tauri环境下TypeScript中File的arrayBuffer方法报错,如何解决?
解决方案
问题分析
你遇到的错误源于Tauri环境下的File对象未实现标准浏览器的arrayBuffer()方法,同时原代码未正确处理异步函数返回的Promise,导致出现未处理的Promise拒绝错误。
修复步骤
1. 替换arrayBuffer()为兼容的FileReader实现
改用FileReader读取文件,这是适配非标准环境的通用方案:
const fileToUint8Array = (file: File): Promise<Uint8Array> => { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => { resolve(new Uint8Array(reader.result as ArrayBuffer)); }; reader.onerror = () => reject(reader.error); reader.readAsArrayBuffer(file); }); };
2. 正确处理异步函数的Promise
原代码直接打印异步函数返回的Promise对象且未捕获错误,需用await结合try/catch处理:
// 在React组件的异步逻辑中调用(比如useEffect或事件处理函数) const processFile = async (file: File) => { try { const array = await fileToUint8Array(file); console.log(array); } catch (error) { console.error('文件转换失败:', error); } };
原因说明
Tauri的文件对象并非完全遵循浏览器标准API,缺失arrayBuffer()方法的实现,这和你推测的TensorFlow.js相关兼容问题本质一致——都是非标准环境下Blob/File API的支持差异。FileReader作为传统文件读取API,兼容性更强,能规避这类环境差异问题。
内容的提问来源于stack exchange,提问作者musako
相关产品推荐
相关产品推荐

