握瑾怀瑜
握瑾怀瑜
  • 发布:2019-11-03 00:07
  • 更新:2021-03-26 13:39
  • 阅读:2658

【已解决】H5+API 中绝对路径转换本地相对路径得到null / resolveLocalFileSystemURL返回不允许读

分类:uni-app

详细问题描述

(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)

[内容]

重现步骤

[步骤] 执行sdk文件上传,得到绝对路径返回到vue文件中,如路径名:

var file = /Users/yoyo/Library/Developer/CoreSimulator/Devices/69323557-3357-47AC-922E-CBEE0B0DF60B/data/Containers/Data/Application/9115484E-F662-493B-B0A3-08F90A420DC3/Documents/Yoyo06_385080913/avatar/Yoyo06_db9734552d4f17200805ae50/thumb/23CD4B22C7D78E370ED2A8B8CFC4084F.jpg

在访达中看了一下,文件是真实存在的,路径表示没有问题。

第一种:读取文件方式,采用5+中的 参考文档
// convertAbsoluteFileSystem: 将平台绝对路径转换成本地URL路径

var fz = plus.io.convertAbsoluteFileSystem(file); // 结果:null

第二种:采用pathToBase64的方式:

                    if(plus.os.name == 'iOS'){  
                        file = "file://" + file; // 绝对路径,前面加file://  
                    };  
                    plus.io.resolveLocalFileSystemURL(file, function(entry) {  
                        entry.file(function(file) {  
                            var fileReader = new plus.io.FileReader()  
                            fileReader.onload = function(data) {  
                                console.log("读取成功:" + JSON.stringify(data));  
                            }  
                            fileReader.onerror = function(error) {  
                                console.log("错误2:" + JSON.stringify(error));  
                            }  
                            fileReader.readAsDataURL(file)  
                        }, function(error) {  
                            console.log("错误3:" + JSON.stringify(error));  
                        })  
                    }, function(error) {  
                        console.log("错误4:" + JSON.stringify(error)); // 一直在这一步打印结果:{"code":4,"message":"不允许读"}  
                    })

[结果]

第一种方式,返回 null
第二种方式,返回 不允许读

[期望]
不管是第一种,还是第二种,支持读取文件

IDE运行环境说明

HBuilderX

[IDE版本号] 2.3.7.20191024

[mac版本号] 10.14.4

uni-app运行环境说明

app

项目是HBuilderX创建的

自定义组件模式

App运行环境说明

[iOS版本号] 12.4 / 13.1.3

[手机型号] iphone8

[模拟器型号] iphone6s plus

联系方式

[QQ] 398927951

2019-11-03 00:07 负责人:无 分享
已邀请:
DCloud_iOS_XHY

DCloud_iOS_XHY

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

试下真机上有问题吗

DCloud_IOS_XTY

DCloud_IOS_XTY

/开头的路径会从www目录开始计算,如果需要表示系统路径请以file://开头

  • 握瑾怀瑜 (作者)

    有加file://的

    2019-11-10 16:32

  • DCloud_IOS_XTY

    回复 握瑾怀瑜: 请使用最新版本测试下

    2019-11-19 11:03

  • 握瑾怀瑜 (作者)

    回复 DCloud_IOS_XTY: 获取页面可访问图片资源存储路径

    有些插件可能需要返回本地的图片路径给页面来显示,如果页面是webview渲染的话可能会存在跨域问题访问不到图片资源,所以需要将图片存放到指定路径下,按照下面的方法获取图片存储路径即可


    我比对了一下目录路径:

    在uniapp中上传的文件存储地址:/Users/xxx/Library/Developer/CoreSimulator/Devices/69323557-3357-47AC-922E-CBEE0B0DF60B/data/Containers/Data/Application/A85BAF49-A89A-4F2E-BC0F-DC44A7D7903B/Library/xxxx


    在插件中上传的文件存储地址:/Users/xxx/Library/Developer/CoreSimulator/Devices/69323557-3357-47AC-922E-CBEE0B0DF60B/data/Containers/Data/Application/A85BAF49-A89A-4F2E-BC0F-DC44A7D7903B/Documents/xxx


    我打印一下指定的存放目录,也是只能在Library目录吗?convertAbsoluteFileSystem无法读取Documents目录吗

    2019-11-22 15:56

  • DCloud_IOS_XTY

    回复 握瑾怀瑜: 这个只支持固定的目录具体可以参考plus.io ApI文档

    2019-11-22 16:24

握瑾怀瑜

握瑾怀瑜 (作者)

该问题目前已经被锁定, 无法添加新回复