2***@qq.com
2***@qq.com
  • 发布:2023-03-29 09:24
  • 更新:2023-10-27 11:29
  • 阅读:826

plus.io.requestFileSystem ios 不允许读

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 13.2.1 (22D68)

HBuilderX类型: 正式

HBuilderX版本号: 3.7.9

手机系统: iOS

手机系统版本号: iOS 16

手机厂商: 苹果

手机机型: iphone13

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
           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,  
                    });  
                });  
            },

操作步骤:

每次都报错{
"code": 4,
"message": "不允许读"
}

预期结果:

ios可以正常读取文件内容

实际结果:

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": "不允许读"
}

2023-03-29 09:24 负责人:无 分享
已邀请:
2***@qq.com

2***@qq.com (作者) - 90后

2新建获取文件失败, [Object] {"code":4,"message":"不允许读"} at pages/index/Read.nvue:118

DCloud_iOS_WZT

DCloud_iOS_WZT

用真机测

wwwzzz

wwwzzz

请问解决了嘛?

要回复问题请先登录注册