小明子
小明子
  • 发布:2020-07-14 14:32
  • 更新:2020-07-15 14:59
  • 阅读:1274

iOS更新SDK后,plus.io.PUBLIC_DOWNLOADS中的资源页面无法访问

分类:HTML5+

之前下载的服务器图片资源放在 plus.io.PUBLIC_DOWNLOADS 目录下面。
调用plus.downloader.createDownload(remoteUrl,options); 下载成功后保存在 plus.io.PUBLIC_DOWNLOADS 。
调用var localpath = plus.io.convertLocalFileSystemURL(task.filename); 将相对路径转为本地路径。

document.querySelector(".myimg").src = localpath.

期望: 图片正常显示
结果: 图片加载失败
现象: IOS升级SDK之前是OK的,现在不行了

解决办法:

  1. 修改下载路径为 _doc 或者 _www 可以正常访问, _document或者_downloads 无法正常访问。

  2. 通过 plus.io.resolveLocalFileSystemURL 可以正常读取,代码如下:
    plus.io.resolveLocalFileSystemURL( realpath, function( entry ) {
    // 可通过fs操作PUBLIC_DOWNLOADS文件系统
    entry.file( function(file){
    var fileReader = new plus.io.FileReader();
    alert("getFile:" + JSON.stringify(file));
    fileReader.readAsDataURL(file,'utf-8');
    fileReader.onloadend = function(evt) {
    // 读取出来的图片是base64
    document.querySelector(".myimg").src = evt.target.result;
    }
    } );

        }, function ( e ) {  
            alert( "Request file system failed: " + e.message );  
        } );  

***** 安卓访问_downloads 或者 _documents正常。

===============================================================

想问官方大佬,更新SDK后,怎么公用目录的资源无法访问了???????

2020-07-14 14:32 负责人:CLP 分享
已邀请:
CLP

CLP

你说的之前的sdk版本的版本号是多少? 升级之后的版本号是多少? HX的基座有这个问题吗?

  • 小明子 (作者)

    之前的版本号有点老了,是去年的。最新的版本号是2.6.9, 20200403的版本,基座也是有问题。


    还有就是,升级SDK之后,之前存在plus.storage的数据拿不到了,这是什么情况?

    2020-07-21 14:39

  • CLP

    回复 小明子: 这个可能是wkwebview跨域问题导致的。plus.storage是存储在沙盒里的,拿不到的原因很可能是key变了,或者手动删除了。

    2020-07-21 15:02

  • 小明子 (作者)

    回复 CLP: 我看了<feature name="Storage" value="io.dcloud.feature.pdr.NStorageFeatureImpl"/> 中的NStorageFeatureImpl的源码,实现逻辑都改了。 再者,wkwebview跨域的话,也只是影响localstorage把? plus.storage应该不影响啊,原生是存在在SharedPreferences.xml里面的啊

    2020-07-21 17:37

  • CLP

    回复 小明子: 我说的是iOS,安卓不知道

    2020-07-21 17:44

  • CLP

    iOS更新SDK后,plus.io.PUBLIC_DOWNLOADS中的资源页面无法访问 我说这个可能是wkwebview跨域问题导致的,你不是访问的图片吗?

    2020-07-21 17:46

  • 小明子 (作者)

    回复 CLP: 现在是iOS和安卓都有问题。 两个问题:



    1. 下载到plus.io.PUBLIC_DOWNLOADS图片,转成本地绝对路径后, HTML中img的src无法读取图片,目前iOS有这个问题,修改成私有doc目录后OK了。

    2. 安卓和iOS的SDK升级到2.6.9版本后,之前老版本存储到plus.storage的数据,新版本App调用plus.storage方法取不到数据。 对比了NStorageFeatureImpl.java里面的实现方法发生了变化。

    2020-07-21 22:04

  • CLP

    回复 小明子: 安卓和iOS的SDK升级到2.6.9版本后,之前老版本存储到plus.storage的数据,新版本App调用plus.storage方法取不到数据。 对比了NStorageFeatureImpl.java里面的实现方法发生了变化。这个iOS角度看 -------plus.storage是存储在沙盒里的,拿不到的原因很可能是key变了,或者手动删除了。

    2020-07-22 12:02

  • 小明子 (作者)

    回复 CLP: 两个App是覆盖更新的,前端的代码没变,key肯定没动,从前端业务逻辑来看是没手动删除的, 我看了一下安卓的plus.storage实现代码,之前调用的SharedPreferences进行存储,现在改成了DCStorage。 iOS的我还没看代码。麻烦你也问问你们安卓同事一下。

    2020-07-22 14:17

  • CLP

    回复 小明子: 你能再次复现问题吗? 是毕现的问题吗?

    2020-07-22 14:52

  • CLP

    下载到plus.io.PUBLIC_DOWNLOADS图片,转成本地绝对路径后, HTML中img的src无法读取图片,目前iOS有这个问题,修改成私有doc目录后OK了。 这个问题确认是, vue中跨域问题,你可以用nvue或者 下载到_www和_doc下。之前可以是用的UIwebview吧,现在是wkwebview

    2020-07-22 16:21

  • 小明子 (作者)

    回复 CLP: 这个问题是必现的, 我们这个是老项目mui的,还没升级到uniapp呢, 目前下载的图片放到_doc解决了。

    ps: 微信分享的图片地址放在_downloads里面是OK的。

    另外问一下,现在新SDK,微信分享是不是必须配置universal Link?? 升级SDK后URL schema不能微信分享了,现在生产上的是之前的SDK,URL schema是OK的。

    2020-07-22 21:08

  • 小明子 (作者)

    至于Plus.storage数据的问题,我看了安卓的源码基本上可以肯定了,之前是调用SharedPreferences 通过键值对存储在本地xml文件中的(刷root可以看到这个文件), 新的SDK是基于sqlite封装了DCStorage,将数据永久存储在数据库。

    2020-07-22 21:11

  • CLP

    回复 小明子: 微信分享新版必须配置universal link。

    2020-07-23 12:05

  • CLP

    回复 小明子: 这个问题是必现的, 我们这个是老项目mui的,还没升级到uniapp呢, 目前下载的图片放到_doc解决了。 知道什么是wkwebview跨域问题吗,document.querySelector(".myimg").src = localpath.这个不是在webview执行的吗,你是不是用的Wkwebview ,wkwebview会存在跨域问题,DOWNLOADS目录目前不是和www相同的父目录下。和你升没升uniapp没关系。https://ask.dcloud.net.cn/article/36348

    2020-07-23 12:17

  • CLP

    回复 小明子: storage问题,你单独发个帖子,@安卓人员吧

    2020-07-23 12:24

  • 小明子 (作者)

    回复 CLP: 好的,谢谢

    2020-07-23 17:26

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