getData(path) {
return new Promise(resolve => {//文件读写是一个异步请求 用promise包起来方便使用时的async+await
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, fs => {//请求文件系统
fs.root.getFile(path, {//请求地址文件 '/storage/emulated/0/config.txt'为根目录 '/config.txt'为/storage/Android/data/io.dcloud.HBuilder(包名)/documents/config.js
create: true//当文件不存在时创建
}, fileEntry => {
fileEntry.file(function (file) {
let fileReader = new plus.io.FileReader()//new一个可以用来读取文件的对象fileReader
fileReader.readAsText(file, 'utf-8')//读文件的格式
fileReader.onerror = e => {//读文件失败
console.log('获取文件失败', fileReader.error)
plus.nativeUI.toast("获取文件失败,请重启应用", {
background: '#ffa38c',
})
return
}
fileReader.onload = e => {//读文件成功
let txtData = e.target.result
console.log('读取成功')
// resolve(txtData)////回调函数内的值想返回到函数外部 就用promise+resolve来返回出去
}
})
}, error => {
console.log('2新建获取文件失败', error)
plus.nativeUI.toast("获取文件失败,请重启应用", {
background: '#ffa38c',
})
return
})
},
e => {
console.log('1请求文件系统失败', e.message)
plus.nativeUI.toast("请求系统失败,请重启应用", {
background: '#ffa38c',
})
return
}
)
}
)
},
download() {
if (this.is_downloading) {
return false;
} else {
this.is_downloading = true;
}
console.log('start download')
let that = this;
const downloadTask = uni.downloadFile({
url: that.file_remote, //仅为示例,并非真实的资源
success: (data) => {
console.log(data);
if (data.statusCode === 200) {
//文件保存到本地
uni.saveFile({
tempFilePath: data.tempFilePath, //临时路径
success: function(res) {
//3获取文件对象
plus.io.resolveLocalFileSystemURL(res.savedFilePath,
(entry) => {
console.log(res.savedFilePath);
console.log(entry.toLocalURL());
// 4打开电子书
uni.setStorageSync(that.file_cache_name, JSON
.stringify(entry.toLocalURL()));
that.is_finish = true;
that.getData(entry.toLocalURL())
// that.openFile(entry.toLocalURL())
})
}
});
}
}
});
downloadTask.onProgressUpdate((res) => {
console.log('下载进度' + res.progress);
console.log('已经下载的数据长度' + res.totalBytesWritten);
console.log('预期需要下载的数据总长度' + res.totalBytesExpectedToWrite);
uni.showToast({
icon: 'none',
mask: true,
title: '下载进度:' + res.progress + '!', //保存路径
duration: 3000,
});
});
},
- 发布:2023-03-29 09:24
- 更新:2023-10-27 11:29
- 阅读:826
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 13.2.1 (22D68)
HBuilderX类型: 正式
HBuilderX版本号: 3.7.9
手机系统: iOS
手机系统版本号: iOS 16
手机厂商: 苹果
手机机型: iphone13
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
每次都报错{
"code": 4,
"message": "不允许读"
}
每次都报错{
"code": 4,
"message": "不允许读"
}
预期结果:
ios可以正常读取文件内容
ios可以正常读取文件内容
实际结果:
ios读取报错{
"code": 4,
"message": "不允许读"
}
ios读取报错{
"code": 4,
"message": "不允许读"
}
bug描述:
通过uni.downloadFile 下载服务器txt文件,uni.saveFile保存文件,通过 getData(path) { return new Promise(resolve => {//文件读写是一个异步请求 用promise包起来方便使用时的async+await plus.io.requestFileSystem(plus.io.PRIVATE_DOC, fs => {//请求文件系统 fs.root.getFile(path, {//请求地址文件 '/storage/emulated/0/config.txt'为根目录 '/config.txt'为/storage/Android/data/io.dcloud.HBuilder(包名)/documents/config.js create: true//当文件不存在时创建 }, fileEntry => { fileEntry.file(function (file) { let fileReader = new plus.io.FileReader()//new一个可以用来读取文件的对象fileReader fileReader.readAsText(file, 'utf-8')//读文件的格式 fileReader.onerror = e => {//读文件失败 console.log('获取文件失败', fileReader.error) plus.nativeUI.toast("获取文件失败,请重启应用", { background: '#ffa38c', }) return } fileReader.onload = e => {//读文件成功 let txtData = e.target.result console.log('读取成功') // resolve(txtData)////回调函数内的值想返回到函数外部 就用promise+resolve来返回出去 } }) }, error => { console.log('2新建获取文件失败', error) plus.nativeUI.toast("获取文件失败,请重启应用", { background: '#ffa38c', }) return }) }, e => { console.log('1请求文件系统失败', e.message) plus.nativeUI.toast("请求系统失败,请重启应用", { background: '#ffa38c', }) return } ) } ) },
报错{
"code": 4,
"message": "不允许读"
}
3 个回复
2***@qq.com (作者) - 90后
2新建获取文件失败, [Object] {"code":4,"message":"不允许读"} at pages/index/Read.nvue:118
DCloud_iOS_WZT
用真机测
wwwzzz
请问解决了嘛?