
uni-app使用本地文件在移动端长久存储数据
uni-app使用plus.io.requestFileSystem完成数据在本地的存储
·
需求
1.本地存储数据。
2.在连接上服务器后可以完成移动端和服务端之间的数据同步。
解决方案
- uni-app 框架中使用plus.io.requestFileSystem技术完成数据在手机端的持久化处理。
代码
- plus.io.requestFileSystem代码
let addr = "/storage/emulated/0/database/";
export default {
storage(className, data) {
plus.io.requestFileSystem(
plus.io.PRIVATE_DOC, // 程序私有文档目录常量
fs => {
// 创建或打开文件, fs.root是根目录操作对象,直接fs表示当前操作对象
fs.root.getFile(
addr + className,
{create: true},// 文件不存在则创建
fileEntry => {
// 文件在手机中的路径
fileEntry.createWriter(writer => {
// 写入文件成功完成的回调函数
writer.onwrite = e => {
//console.log('写入成功');
};
// 向文件中写入数据
writer.write(
JSON.stringify(data)
);
});
},
e => {
console.log('getFile failed: ', e);
}
);
},
e => {
console.log(e.message);
}
);
},
read(className) {
let that = this;
return new Promise((resolve, reject) => {
plus.io.requestFileSystem(
plus.io.PRIVATE_DOC,
fs => {
fs.root.getFile(
addr + className,
{create: false},
fileEntry => {
fileEntry.file(function(file) {
//console.log('文件大小:' + file.size + '-- 文件名:' + file.name);
//创建读取文件对象
let fileReader = new plus.io.FileReader();
//以文本格式读取文件数据内容
fileReader.readAsText(file, 'utf-8');
//文件读取操作完成时的回调函数
fileReader.onloadend = function(evt) {
resolve(evt.target.result)
};
});
},
e => {
reject(e);
}
);
},
e => {
reject(e);
console.log(e.message);
}
);
})
}
}
- end
权限配置
在manifest.json文件中,添加权限。
{
...,
/* 5+App特有相关 */
"app-plus" : {
...,
"distribute" : {
/* android打包配置 */
"android" : {
"permissions" : [
...,
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
...
]
},
...
}
},
...
}
踩坑记录
- 无法写入,异常提示为:{ “code”: 10, “message”: “执行出错”}
答:可能是因为权限没有开通,需要开通存储空间权限。 - end
更多推荐
所有评论(0)
您需要登录才能发言
查看更多评论