uni-app中plus.io.FileReader()读取文件失败
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');
}
排查方法
-
检查文件路径:
- 确保
filePath
是正确的。在uni-app中,本地文件路径通常以_www/
,_doc/
,_downloads/
等开头。 - 如果路径包含动态部分,确保动态部分正确拼接。
- 确保
-
检查文件权限:
- 在Android平台上,需要在
manifest.json
中配置必要的文件访问权限。 - 对于iOS,通常不需要额外配置权限,但确保文件路径和访问方式符合iOS的安全要求。
- 在Android平台上,需要在
-
文件是否存在:
- 在尝试读取文件之前,可以使用
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);
});
- 调试信息:
- 在
reader.onerror
回调中打印详细的错误信息,这有助于确定失败的具体原因。
- 在
通过上述代码和排查方法,你应该能够定位并解决plus.io.FileReader
读取文件失败的问题。如果问题依旧存在,建议检查uni-app和HBuilderX的版本是否最新,以及是否有相关的已知问题或bug。