之前下载的服务器图片资源放在 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的,现在不行了
解决办法:
-
修改下载路径为 _doc 或者 _www 可以正常访问, _document或者_downloads 无法正常访问。
-
通过 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后,怎么公用目录的资源无法访问了???????
小明子 (作者)
之前的版本号有点老了,是去年的。最新的版本号是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和安卓都有问题。 两个问题:
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