文章目录
请求本地文件系统对象,读取文件的数据内容
API文档
场景: 蓝牙设备升级,根据用户选择bin文件,读取文件数据内容;分包发送给蓝牙设备;
读取.bin文件
- 通过
requestFileSystem
获取指定的文件 - 应用私有资源目录,对应常量有4种:具体使用请查看文档
plus.io.PRIVATE_WWW
- plus.io.PRIVATE_DOC
- plus.io.PUBLIC_DOWNLOADS
- plus.io.PUBLIC_DOWNLOADS
- 分包发送数据:请查看
javascript
/**
* @description 读取文件内容,根据实际情况处理数据;
* @param {String} filePath 文件路径
* @returns {Object}
*/
const getFileSystem = (filePath) => {
filePath = filePath || '/static/B1.1.2.bin'; // TEST
return new Promise((resolve, reject) => {
plus.io.requestFileSystem(plus.io.PRIVATE_WWW, (fs) => {
fs.root.getFile(filePath, {
create: false
}, (fileEntry) => {
fileEntry.file((file) => {
console.log('file:', file);
// 创建读取文件对象 创建读取文件对象
const fileReader = new plus.io.FileReader();
// 以URL编码格式读取文件数据内容 读取文件的数据内容,并将数据内容进行URL编码
fileReader.readAsDataURL(file);
fileReader.onload = (evt) => {
let strs = evt.target.result;
// 将 Base64 字符串转成 ArrayBuffer 对象
let arrayBuffer = uni.base64ToArrayBuffer(strs);
// 返回数据
resolve({
size: file.size,
arrayBuffer
});
}
fileReader.onerror = (err) => {
console.log('文件读取失败');
reject(err);
}
})
}, (error) => {
console.log('读取文件报错:', error);
})
})
})
}
file对象返回数据格式
*例:放在本地 /static/目录下.bin文件
javascript
{
"size": 98036,
"type": "application/macbinary",
"name": "1.0.44.bin",
"lastModifiedDate": "2024-12-25T08:39:07.022Z",
"fullPath": "/Users/xxx/Library/Developer/CoreSimulator/Devices/FBAB31F1xxx/data/Containers/Data/Application/F9314A28xxx/Documents/Pandora/apps/F9C07xxx/www/static/1.0.44.bin"
}
踩过的坑
- 读取
本地文件
:安卓、iOS设备均正常读取; - 读取
_doc/uniapp_temp开头路径
:安卓能正常,iOS设备 得到size为 0
情况- 更换目录常量也不行,读取失败:
{"code":1, "message":"文件没有发现"}
- 解决:
- 可以先把文件下载到本地,再通过本地路径去读取
- 把
requestFileSystem
修改为resolveLocalFileSystemURL
,具体请查看下一篇文章;
- 更换目录常量也不行,读取失败: