当前Cocos Creator 版本:2.3.2
1、文件下载函数
function downloadBinary(item, callback) {
var url = item.url;
var xhr = cc.loader.getXMLHttpRequest(), errInfo = "Load binary data failed: " + url;
xhr.open("GET", url, true);
xhr.responseType = item.type;
xhr.onload = function () {
var resp = xhr.response;
if (resp) {
callback && callback(null, xhr.response);
} else callback && callback(errInfo + "(no response)");
};
xhr.onerror = function () {
callback && callback(errInfo + "(error)");
};
xhr.ontimeout = function () {
callback && callback(errInfo + "(time out)");
};
xhr.send(null);
}
2、下载zip
downloadBinary({ url: zipUrl, type: "arraybuffer" }, (err, data) => {
if (null == err) {
let u8Arr = new Uint8Array(data);
//保存文件
let path = jsb.fileUtils.getWritablePath() + "classes/res/";
if (!jsb.fileUtils.isDirectoryExist(path)) {
jsb.fileUtils.createDirectory(path);
}
let fPath = `${path}test.zip`;
let rst = jsb.fileUtils.writeDataToFile(u8Arr, fPath)
if (rst) {
var testSp = this.node.getChildByName("testSp");
if (testSp) {
//解压压缩包
window.ui_login_main = this;
// 调用android 或者iOS 原生解压.zip
deviceHelper.unzipFilePath("test", path, path, "ui_login_main.unzipCallback");
}
return;
} else {
cc.log("Blade:下载失败1")
}
} else {
cc.log("Blade:下载失败2")
}
});
3、解压并加载
function unzipCallback(cbData) {
cc.log("Blade:解压回调cbData:" + JSON.stringify(cbData));
// zip包里放了两个测试文件cover_def.png和testPng.json
let prePath = jsb.fileUtils.getWritablePath() + "classes/res/";
// 检测其中一个文件是否存在
cc.log("Blade:文件是否存在:" + jsb.fileUtils.isFileExist(prePath + "cover_def.png"))
var testSp = this.node.getChildByName("testSp");
if (testSp) {
// 注意资源是绝对路径
var allRes = [prePath + "cover_def.png", prePath + "testPng.json"];
cc.loader.load(allRes, (errors, results) => {
if (errors) {
cc.log("Blade:糟糕我被return了:" + JSON.stringify(error))
return;
}
var aTex = results.getContent(allRes[0]);//读取文件也是读取绝对路径
// 设置图片
testSp.getComponent(cc.Sprite).spriteFrame = new cc.SpriteFrame(aTex);
//输出json内容
var bJsonObj = results.getContent(allRes[1]);
cc.log("Blade:bJsonObj:" + JSON.stringify(bJsonObj))
});
}
}