树下的老大爷
树下的老大爷
  • 发布:2021-03-12 16:35
  • 更新:2021-03-12 16:35
  • 阅读:585

离线存储blob数据 读取出来之后不能用了

分类:HTML5+

目的是http请求svga图 保存到本地 再次加载直接读取本地的

                    function blobtoStr(blob,fn){  
                        var reader = new FileReader();  
                        reader.readAsText(blob, 'utf-8');  
                        reader.onload = function (e) {  
                            fn(reader.result)  
                        }  
                    }  
                        var o = new XMLHttpRequest;  
                        let name = e.split('&&')[0]  
                        let ht = e.split('&&')[1]  
                        console.log(e)  
                        console.log('网下载',name,ht, e.split('&&'))  
                        o.open("GET", ht, !0), o.responseType = "blob", o.onloadend = function() {  
                            //#ifdef APP-PLUS  
                            console.log('网下载完毕')  
                            console.log(name)  
                            console.log(typeof o.response)  
                            blobtoStr(o.response,(e)=>{  
                                console.log('缓存完毕')  
                                console.log(typeof e)  
                                plus.storage.setItem(name,e)  
                            })  
                            u._readBlobAsArrayBuffer(o.response, function(e) {  
                                    var i = new Uint8Array(e, 0, 4);  
                                    80 == i[0] && 75 == i[1] && 3 == i[2] && 4 == i[3] ?   
                                                                       JSZip.loadAsync(e).then(function(e) {  
                                        u._decodeAssets(e, t)  
                                    }) : u.load_viaProto(e, t, r)  
                                });  
                            // let _dat = u._readBlobAsArrayBuffer(new Blob([o.response],{type: "arraybuffer"});)  
                            // // #endif  
                            // u.load_viaProto(_dat, t, r)  
                        }, o.send()  

上面是通过http获取的文件 报错到本地 然后进行了渲染,这时候没有问题

                // buffter值  
                let buffter = plus.storage.getItem(domeId)  
                if(buffter){  
                    console.log('存在缓存')  
                    //将字符串转换成 Blob对象  
                    filePath = new Blob([buffter], {  
                        type: 'application/octet-stream'  
                    });  
                }  
                // #endif  
                if(typeof filePath=='string'){  
                    filePath = domeId+'&&'+filePath  
                }  
                console.log(typeof filePath)

取出string类型的blob 转回blob类型

                        u._readBlobAsArrayBuffer(e, function(e) {  
                            var i = new Uint8Array(e, 0, 4);  
                            if(80 == i[0] && 75 == i[1] && 3 == i[2] && 4 == i[3]){  
                                JSZip.loadAsync(e).then(function(e) {  
                                    u._decodeAssets(e, t)  
                                })  
                            } else{  
                                u.load_viaProto(e, t, r)  
                            }  
                        });

上面代码加载就出现了错误
16:28:07.750 incorrect header check at static/svga.min.js:2626
16:28:07.775 Uncaught incorrect header check at static/svga.min.js:2626
16:28:07.798 incorrect header check at static/svga.min.js:2626
16:28:07.824 Uncaught incorrect header check at static/svga.min.js:2626

2021-03-12 16:35 负责人:无 分享
已邀请:

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