zby-nova-upload
Version:
zby nova upload
181 lines (154 loc) • 5.26 kB
JavaScript
'use strict';
// require
var fs = require('fs');
var path = require('path');
var qiao = require('qiao.util.all');
// const
var versions = ['1.7.2', '1.7.3'];
var cocosJs = 'cocos2d-js-min.js';
var pngName = 'splash.png';
var mainJs = 'main.js';
/**
* upload nova zip
*/
exports.uploadNovaZip = async function(sourceNovaZipPath, cocosFileFolder, ossConfig, dev){
// 1.解压zip
// 2.操作文件
// 3.上传oss
// check params
console.log('check params ...');
if(!sourceNovaZipPath) return qiao.json.danger('缺少参数sourceNovaZipPath');
if(!cocosFileFolder) return qiao.json.danger('缺少参数cocosFileFolder');
if(!ossConfig) return qiao.json.danger('缺少参数ossConfig');
console.log('check params success.');
console.log();
// check zip file
console.log('check zip file ...');
var checkZipResult = checkZipFile(sourceNovaZipPath);
if(checkZipResult) return qiao.json.danger(checkZipResult);
console.log('check zip file success');
console.log();
// check oss config
console.log('init oss client ...');
var client = null;
try{
client = qiao.oss.client(ossConfig);
}catch(e){
if(dev) console.log(e);
return qiao.json.danger('oss配置文件错误!');
}
console.log('init oss client success');
console.log();
// unzip zip file
console.log('unzip course zip file ...');
var tempFolder = path.resolve(sourceNovaZipPath, '../' + qiao.encode.uuid());
var tempCourseFolder = qiao.encode.uuid();
var novaZipFolder = path.resolve(tempFolder, tempCourseFolder);
try{
qiao.zip.unzip(sourceNovaZipPath, novaZipFolder);
}catch(e){
if(dev) console.log(e);
return qiao.json.danger('解压缩nova课件原文件出错!');
}
console.log('unzip course zip file success');
console.log();
// handle course
console.log('handle course files ...');
var handleCourseResult = handleCourse(sourceNovaZipPath, novaZipFolder, cocosFileFolder, dev);
if(handleCourseResult) return qiao.json.danger(handleCourseResult);
console.log('handle course files success');
console.log();
// zip folder
console.log('zip course files ...');
try{
await qiao.zip.zipFolderSync(novaZipFolder, novaZipFolder + '.zip');
}catch(e){
if(dev) console.log(e);
return qiao.json.danger('压缩处理后的文件夹出错!');
}
console.log('zip course files success');
console.log();
// upload to oss
console.log('upload course files to ali-oss ...');
try{
await qiao.oss.uploadFolderSync(client, ossConfig.ossPath, tempFolder);
}catch(e){
if(dev) console.log(e);
return qiao.json.danger('上传到oss出错!');
}
console.log('upload course files to ali-oss success');
console.log();
// del temp folder
console.log('delete course files ...');
qiao.file.rm(tempFolder + '/');
console.log('delete course files success');
console.log();
// return
var version = getVersion(sourceNovaZipPath);
return qiao.json.success(ossConfig.ossHost + ossConfig.ossPath + '/' + tempCourseFolder + '/index.html?cocos=' + version);
};
// check zip file
function checkZipFile(zipFile){
// check zip
var zipExt = qiao.file.extname(zipFile);
if(zipExt != '.zip') return 'nova课件原文件必须为zip格式!';
// check -
if(zipFile.indexOf('-') == -1) return 'nova课件原文件必须以-版本号结尾!';
// check version
var version = getVersion(zipFile);
if(versions.indexOf(version) == -1) return 'nova课件原文件版本号必须为以下之一:' + versions;
// suc
return null;
}
// handle course
function handleCourse(sourceNovaZipPath, novaZipFolder, cocosFileFolder, dev){
var delCososResult = delCocos(novaZipFolder, dev);
if(!delCososResult) return '删除' + cocosJs + '出错!';
var copyPngResult = copyPng(novaZipFolder, cocosFileFolder, dev);
if(!copyPngResult) return '复制' + pngName + '出错!'
var copyJsResult = copyJs(sourceNovaZipPath, novaZipFolder, cocosFileFolder, dev);
if(!copyJsResult) return '复制' + mainJs + '出错!';
return null;
}
// del cocos
function delCocos(novaZipFolder, dev){
var cocosJsPath = path.resolve(novaZipFolder, cocosJs);
try{
fs.statSync(cocosJsPath);
fs.unlinkSync(cocosJsPath);
return true;
}catch(e){
if(dev) console.log(e);
return false;
}
}
// copy png
function copyPng(novaZipFolder, cocosFileFolder, dev){
var pngSourcePath = path.resolve(cocosFileFolder, pngName);
var pngDestPath = path.resolve(novaZipFolder, pngName);
try{
fs.copyFileSync(pngSourcePath, pngDestPath);
return true;
}catch(e){
if(dev) console.log(e);
return false;
}
}
// copy js
function copyJs(sourceNovaZipPath, novaZipFolder, cocosFileFolder, dev){
var version = getVersion(sourceNovaZipPath);
var jsSourcePath = path.resolve(cocosFileFolder, 'main-' + version + '.js');
var jsDestPath = path.resolve(novaZipFolder, mainJs);
try{
fs.copyFileSync(jsSourcePath, jsDestPath);
return true;
}catch(e){
if(dev) console.log(e);
return false;
}
}
// get version
function getVersion(zipPath){
var ss = zipPath.split('-');
return ss[ss.length - 1].toLowerCase().split('.zip').join('');
}