uni-app中plus.io.FileReader()读取文件失败

发布于 1周前 作者 yibo5220 来自 Uni-App

uni-app中plus.io.FileReader()读取文件失败

我想选择一个xlsx的文件读取文件数据在转为base64报错 code:10

选择文件的代码

plus.io.chooseFile(
{
    title: '选择文件',
    filetypes: ['xlsx', 'xls'], // 允许的文件类型
    multiple: false, // 是否允许多选
},
(e) => {
    pathToBase64App(e.files[0])
},
)

使用路径获取文件属性

plus.io.resolveLocalFileSystemURL(
path,
function (entry) {
    entry.file(
    function (file) {
        var fileReader = new plus.io.FileReader()
        fileReader.onload = function (evt) {
            console.log('onload: ', evt.target.result)
        }
        fileReader.onerror = function (error) {
            console.log('failed: ', error)
        }
        fileReader.readAsDataURL(file)
    },
    function (error) {
        console.log('failed: ', error)
    },
    )
},
function (error) {
    console.log('failed: ', error)
},
)

提示报错

{
    "type": "error",
    "bubbles": false,
    "cancelBubble": false,
    "cancelable": false,
    "lengthComputable": false,
    "loaded": 0,
    "total": 0,
    "target": {
        "fileName": "/storage/emulated/0/file/zcxx.xlsx",
        "readyState": 2,
        "result": null,
        "error": {
            "code": 10,
            "message": "执行出错"
        },
        "onloadstart": null,
        "onprogress": null,
        "onload": "function() { [native code] }",
        "onabort": null,
        "onerror": "function() { [native code] }",
        "onloadend": null
    }
}

1 回复

在uni-app中,使用plus.io.FileReader读取文件失败的问题可能由多种原因引起,包括但不限于文件路径错误、权限不足、文件不存在等。以下是一个使用plus.io.FileReader读取本地文件的示例代码,以及一些可能导致读取失败的常见原因和排查方法。

示例代码

// 确保在plus环境中执行
if (window.plus) {
    // 假设文件路径为 "_www/test.txt"
    var filePath = '_www/test.txt';

    // 创建FileReader对象
    var reader = new plus.io.FileReader();

    // 读取文件内容,使用readAsText方法
    reader.onload = function(e) {
        console.log('File content:', e.target.result);
    };

    reader.onerror = function(e) {
        console.error('Error reading file:', e.message);
    };

    // 开始读取文件
    reader.readAsText(filePath);
} else {
    console.warn('plus environment is not available');
}

排查方法

  1. 检查文件路径

    • 确保filePath是正确的。在uni-app中,本地文件路径通常以_www/, _doc/, _downloads/等开头。
    • 如果路径包含动态部分,确保动态部分正确拼接。
  2. 检查文件权限

    • 在Android平台上,需要在manifest.json中配置必要的文件访问权限。
    • 对于iOS,通常不需要额外配置权限,但确保文件路径和访问方式符合iOS的安全要求。
  3. 文件是否存在

    • 在尝试读取文件之前,可以使用plus.io.resolveLocalFileSystemURL检查文件是否存在。
plus.io.resolveLocalFileSystemURL(filePath, function(entry) {
    console.log('File exists:', entry.isFile());
    // 如果文件存在,继续读取
    var reader = new plus.io.FileReader();
    reader.onload = function(e) {
        console.log('File content:', e.target.result);
    };
    reader.readAsText(entry.toLocalURL());
}, function(e) {
    console.error('File does not exist:', e.message);
});
  1. 调试信息
    • reader.onerror回调中打印详细的错误信息,这有助于确定失败的具体原因。

通过上述代码和排查方法,你应该能够定位并解决plus.io.FileReader读取文件失败的问题。如果问题依旧存在,建议检查uni-app和HBuilderX的版本是否最新,以及是否有相关的已知问题或bug。

回到顶部