[]Laya.MiniAdpter.downLoadFile缓存的文件无法读取的问题

这两天使用Laya.MiniAdpter.downLoadFile来缓存二进制文件,逻辑如下:
 
    public Request(url:string):void
{
console.log("url: " + url);

if (Laya.Browser.onMiniGame)
{
var args = {url:url, handler:null};
var handler = Laya.Handler.create(this, this.OnDownloadFileInWxOk, [args], false);
args.handler = handler;
Laya.MiniAdpter.downLoadFile(url, null, handler);
}
else
{
this.DoLoadData(url);
}
}

protected DoLoadData(url:string):void
{
Laya.loader.load(url, Laya.Handler.create(this, this.OnLoadDataCb));
}

protected OnDownloadFileInWxOk(args:any, result:any, data:any):void
{
console.log("OnDownloadFileInWxOk");
console.log("" + result + ", data: " + data);
if (result == 2)
return; //下载中

if (result == 0)
{
this.DoLoadData(args.url);
}
else
{
console.log(data);
}
args.handler.recover();
}

protected OnLoadDataCb(result:any):void
{
console.log("OnDownloadCb");
if (result != null)
{
console.log(typeof(result));
// console.log(result);
}
else
{
console.log("result is none");
}
}
然后在调试中发现了两个问题:
1、在MiniFileMgr.readFile函数中:
MiniFileMgr.readFile=function(filePath,encoding,callBack,readyUrl,isSaveFile,fileType){
(encoding===void 0)&& (encoding="ascill");
(readyUrl===void 0)&& (readyUrl="");
(isSaveFile===void 0)&& (isSaveFile=false);
(fileType===void 0)&& (fileType="");
MiniFileMgr.fs.readFile({filePath:filePath,encoding:encoding,
success:function (data)
{
// 这一行,先判断文件名,后判断isSaveFile,在微信模拟器上可以工作,
// 但是在微信真机上,api返回的临时文件名(就是filePath)是不包含http和https的,所以这句话失效,无法缓存文件。
// 我自己修改的版本是:
// if (filePath.indexOf("http://";) != -1 || filePath.indexOf("https://";) != -1 || isSaveFile)
if (filePath.indexOf("http://";)!=-1 || filePath.indexOf("https://";)!=-1)
{
if(MiniAdpter.autoCacheFile || isSaveFile)
{
MiniFileMgr.copyFile(filePath,readyUrl,callBack,encoding);
}
}
else
callBack !=null && callBack.runWith([0,data]);
},
fail:function (data)
{
if (data)
callBack !=null && callBack.runWith([1,data]);
}
});
}
2、在MiniFileMgr.copyFile函数中:
MiniFileMgr.fs.copyFile(
{
srcPath:tempFilePath,
destPath:saveFilePath,
success:function (data2)
{
/*
这里把临时文件名作为md5Name参数传递给了MiniFileMgr.onSaveFile函数,
但是最新实际上刚刚保存的文件名是:saveFilePath
感觉这里有些奇怪。
附:MiniFileMgr.onSaveFile 的函数原型:function(readyUrl,md5Name,isAdd,encoding,callBack,fileSize)
*/
MiniFileMgr.onSaveFile(readyUrl,tempFileName,true,encoding,callBack,data.size);
},
fail:function (data)
{
callBack !=null && callBack.runWith([1,data]);
}
}
);
同时在MiniLoader.load中,又将url当作文件名去加载文件(这个函数的最后一段代码,不是图片、也不是子域、同时本地存在文件信息的处理):
            if (!MiniFileMgr.getFileInfo(url))
{
// ......找不到文件的处理,会调用默认的下载接口
}else
{
var fileObj=MiniFileMgr.getFileInfo(url);
fileObj.encoding=fileObj.encoding==null ? "ascii" :fileObj.encoding;
// 在这里输出,是可以看到刚刚写入的内容的。
// 但是这里用url读取文件,是读不出来了
MiniFileMgr.readFile(url,fileObj.encoding,new Handler(MiniLoader,MiniLoader.onReadNativeCallBack,[encoding,url,type,cache,group,ignoreCache,thisLoader]),url);
}
请问,应该怎么解决呢?
谢谢!
 
 
已邀请:

Laya_XSN

赞同来自:

问题一:
在MiniLoader里加载文件的时候会从缓存里获取缓存列表,在downloadfile里如果设置了加载完文件自动缓存,数据应该是存在缓存列表的。关于filePath这个是带http标识的,不是用的微信返回的一个临时地址,这个还需要打印确认下。
 
问题二:这里不是很明白,你能写个具体是问题的例子提交下吗,我帮你看下具体的问题

134*****024

赞同来自:

附件中是类的源文件,谢谢

modongrong

赞同来自:

问下问题一解决了吗?我在真机上打印的是wxfile://tmp.....这个临时文件名,真机上缓存不了。需要修改源码吗?

姚生

赞同来自:

我遇到的问题是  
MiniFileMgr.fs.readFile 在字节互动 模拟机上读取二进制文件 返回success 头条小游戏 真机上返回
fail  ,微信读取二进制文件都是好的,好苦恼

要回复问题请先

商务合作
商务合作