Cordova应用中FileReader API仅支持图片,无法读取PDF/Excel等格式求助
Cordova下FileReader读取PDF/XML等文件返回null的解决方法
问题分析
直接使用readAsDataURL读取非图片文件时,在Cordova环境中可能因文件编码、二进制处理兼容性或未捕获错误导致返回null,且缺少错误监听无法定位问题根源。
解决方案
1. 添加错误监听排查问题
先给FileReader添加错误回调,明确读取失败的具体原因:
let reader = new FileReader(); entry.file(function (file) { reader.onloadend = function (e) { var content = e.target.result; console.log(content); }; // 捕获读取错误 reader.onerror = function(e) { console.error('读取错误码:', e.target.error.code); console.error('错误信息:', e.target.error.message); }; reader.readAsDataURL(file); });
2. 改用readAsArrayBuffer读取二进制文件
对于PDF、XLS等二进制文件,用readAsArrayBuffer读取更稳定,再手动转换为DataURL格式满足上传需求:
// 工具函数:ArrayBuffer转Base64 function arrayBufferToBase64(buffer) { let binary = ''; const bytes = new Uint8Array(buffer); for (let i = 0; i < bytes.byteLength; i++) { binary += String.fromCharCode(bytes[i]); } return window.btoa(binary); } let reader = new FileReader(); entry.file(function (file) { reader.onloadend = function (e) { const arrayBuffer = e.target.result; if (arrayBuffer) { // 转换为标准DataURL格式 const base64Str = arrayBufferToBase64(arrayBuffer); const dataUrl = `data:${file.type};base64,${base64Str}`; console.log(dataUrl); // 此处可将dataUrl用于上传 } else { console.error('读取结果为空'); } }; reader.onerror = function(e) { console.error('读取错误:', e.target.error.message); }; reader.readAsArrayBuffer(file); });
3. 检查文件权限与有效性
- 确认
cordova-plugin-file插件已正确安装并配置,Android端需申请READ_EXTERNAL_STORAGE权限,iOS端需配置文件访问权限; - 验证
entry指向的文件路径正确,文件未损坏、未被占用。
内容的提问来源于stack exchange,提问作者Vadivel
相关产品推荐
相关产品推荐

