You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:55:19