详细问题描述(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)
[内容]
/**  
 * 图片本地缓存  
 */  
Vue.prototype.getImg = async function(url) {  
    if (url == undefined || url.length < 5 | url.substr(0, 4) != 'http') {  
        return url;  
    }  
    //获取下载文件地址  
    let downurl = url;  
    var start = url.lastIndexOf(".");  
    var end = url.lastIndexOf("?") >= 0 ? url.lastIndexOf('?') : url.length;  
    var ext = url.substring(start, end);  
    var ext_num = url.indexOf(ext);  
    if(ext_num>=0){  
        downurl = url.substr(0,ext_num)+ext;  
    }  
    //读取缓存文件  
    let CacheImage = uni.getStorageSync("CacheImage");  
    let Ids = CacheImage.Ids;  
    let Val = CacheImage.Val;  
    let MName = utils.md5(downurl);  
    if(typeof CacheImage=='object' && typeof Ids=='object' && typeof Val=='object'){  
        //有缓存  
        let index = Ids.indexOf(MName);  
        if(index>=0){  
            return Val[index];  
        }  
    }else{  
        Ids = [];  
        Val = [];  
        CacheImage = {Ids:Ids,Val:Val}  
    }  
    async function getImgs(){  
        return new Promise(function(resole){  
            uni.downloadFile({  
                url:downurl,  
                success:function(res){  
                    if(res.statusCode===200){  
                        uni.saveFile({  
                            tempFilePath:res.tempFilePath,  
                            success:function(e){  
                                Ids.push(MName);  
                                Val.push(e.savedFilePath);  
                                CacheImage = {Ids:Ids,Val:Val}  
                                uni.setStorageSync("CacheImage",CacheImage);  
                                resole(e.savedFilePath)  
                            },  
                            fail:function(){  
                                resole(res.tempFilePath)  
                            }  
                        })  
                    }else{  
                        resole(url);  
                    }  
                },fail:function(){  
                    resole(url);  
                }  
            })  
        })  
    }  
    return await getImgs();  
}重现步骤
[步骤]
开始是用的5+接口,也出现了这种情况,后面改成uni的接口写了这个方法来处理本地图片缓存,但是在真机上还是无法显示图片,模拟器正常。
本地打包,线上打包没试过,太慢了。
[结果]
解决这个问题
[期望]
[如果语言难以表述清晰,可以拍一个视频或截图,有图有真相]  
IDE运行环境说明
[HBuilder 或 HBuilderX]
HBuilderX
[IDE版本号]
1.1.0.20181030
[windows版本号]
[mac版本号]
10.13.6  
App运行环境说明
[Android版本号]
[iOS版本号]
12.0.1
[手机型号]
iphone 6
[模拟器型号]
iphone 6  IOS 11.0.1  
附件
[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]
[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]
[安装包]  
联系方式
[QQ]  
 
             
             
             
			 
                                        
                                    

 
            
灰色的灵魂
您这个问题解决了么,求代码。我也在做本地缓存。
2019-06-13 12:35
gysidon (作者)
回复 灰色的灵魂: 第一次加载网络图片,第二次以后加载本地缓存图片就行了;
2019-06-13 12:39
灰色的灵魂
回复 gysidon: 您好,我全局定义您提供的代码,可以保存到本地了。然后用了Promise.then封装保存了数据,但是发现存储到的是_doc/uniapp_save/1560400449418.jpg这样的位置,然后却不显示。能提供下您这个页面的代码嘛,27888677@qq.com 衷心感谢。
2019-06-13 13:13