后台:json上传
This commit is contained in:
@@ -2,14 +2,19 @@ import { Controller } from 'egg';
|
||||
import { Stream } from 'stream';
|
||||
import { STATUS } from '@consts';
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const unzip = require("unzip-stream");
|
||||
const temp = require('temp');
|
||||
const compressing = require("compressing");
|
||||
const moment = require("moment");
|
||||
const pump = require('mz-modules/pump');
|
||||
|
||||
const folderName = 'hot_update_files';
|
||||
const hotUpdateAddr = `/root/${folderName}`;
|
||||
const publishPath = '/root/hot_update_backup';
|
||||
import {exec} from 'child_process'
|
||||
import { reloadResources } from '@pubUtils/data';
|
||||
const sendToWormhole = require('stream-wormhole');
|
||||
|
||||
|
||||
export default class UploadController extends Controller {
|
||||
@@ -154,46 +159,121 @@ export default class UploadController extends Controller {
|
||||
})
|
||||
}
|
||||
|
||||
private jsonFolderName = 'resource';
|
||||
private jsonFolderPath = `/root/zyz/shared/${this.jsonFolderName}`;
|
||||
private jsonFolder = '/app/resource/jsons';
|
||||
private warjsonFolder = '/app/resource/warJsons';
|
||||
private tsFolder = '/app/pubUtils';
|
||||
|
||||
private distJsonFolder = `/../game-server/dist${this.jsonFolder}`;
|
||||
private distWarjsonFolder = `/../game-server/dist${this.warjsonFolder}`;
|
||||
private distTsFolder = `/../game-server/dist${this.tsFolder}`;
|
||||
|
||||
public async uploadJson() {
|
||||
const { ctx } = this;
|
||||
const stream = await ctx.getFileStream();
|
||||
// const filename = stream.filename;
|
||||
// const target = path.join(url, filename);
|
||||
|
||||
const parts = ctx.multipart({ });
|
||||
const files = [];
|
||||
|
||||
if(stream.mimeType == 'application/zip') {
|
||||
try {
|
||||
let dirPath = await temp.mkdir(this.jsonFolderName); // 临时文件夹
|
||||
|
||||
console.log('读取文件');
|
||||
await this.doUnzipExtra(stream, dirPath);
|
||||
let files = new Array<{path:string,name:string}>();
|
||||
this.getFileList(dirPath, files);
|
||||
console.log(files);
|
||||
|
||||
console.log('保存文件');
|
||||
if (!fs.existsSync(this.jsonFolderPath)) {
|
||||
fs.mkdirSync(this.jsonFolderPath);
|
||||
try {
|
||||
let stream;
|
||||
while ((stream = await parts()) != null) {
|
||||
const filename = stream.filename;
|
||||
let filenameWithoutEx = filename?filename.split('.')[0]:'';
|
||||
if (stream.mimeType == 'application/json') {
|
||||
if (filenameWithoutEx.match(/^\d{1,}$/)) {
|
||||
let target1 = path.join(this.config.baseDir, this.warjsonFolder, filename);
|
||||
let target2 = path.join(this.config.baseDir, this.distWarjsonFolder, filename);
|
||||
const writeStream = fs.createWriteStream(target1);
|
||||
await pump(stream, writeStream);
|
||||
fs.copyFileSync(target1, target2);
|
||||
// files.push(filename);
|
||||
} else {
|
||||
let target1 = path.join(this.config.baseDir, this.jsonFolder, filename);
|
||||
let target2 = path.join(this.config.baseDir, this.distJsonFolder, filename);
|
||||
const writeStream = fs.createWriteStream(target1);
|
||||
await pump(stream, writeStream);
|
||||
fs.copyFileSync(target1, target2);
|
||||
files.push(filename);
|
||||
}
|
||||
} else if (stream.mimeType == 'application/octet-stream') {
|
||||
let target1 = path.join(this.config.baseDir, this.tsFolder, filename);
|
||||
let target2 = path.join(this.config.baseDir, this.distTsFolder, filename);
|
||||
const writeStream = fs.createWriteStream(target1);
|
||||
await pump(stream, writeStream);
|
||||
fs.copyFileSync(target1, target2);
|
||||
files.push(filename);
|
||||
}
|
||||
for (let {path, name} of files) {
|
||||
console.log(`${this.jsonFolderPath}/${name}`);
|
||||
fs.renameSync(path, `${this.jsonFolderPath}/${name}`);
|
||||
}
|
||||
|
||||
temp.cleanupSync();
|
||||
return ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, {
|
||||
"files": JSON.stringify(files)
|
||||
});
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
return ctx.body = ctx.service.utils.resResult(STATUS.INTERNAL_ERR);
|
||||
sendToWormhole(stream);
|
||||
}
|
||||
|
||||
} else {
|
||||
return ctx.body = ctx.service.utils.resResult(STATUS.GM_UPLOAD_FORMAT_ERR);
|
||||
}catch(e) {
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
return ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, {
|
||||
"files": files
|
||||
});
|
||||
|
||||
// console.log('****', stream);
|
||||
// // const filename = stream.filename;
|
||||
// // const target = path.join(url, filename);
|
||||
|
||||
// if(stream.mimeType == 'application/zip') {
|
||||
// try {
|
||||
// let dirPath = await temp.mkdir(this.jsonFolderName); // 临时文件夹
|
||||
|
||||
// console.log('读取文件');
|
||||
// await this.doUnzipExtra(stream, dirPath);
|
||||
// let files = new Array<{path:string,name:string}>();
|
||||
// this.getFileList(dirPath, files);
|
||||
// console.log(files);
|
||||
|
||||
// console.log('保存文件');
|
||||
// if (!fs.existsSync(this.jsonFolderPath)) {
|
||||
// fs.mkdirSync(this.jsonFolderPath);
|
||||
// }
|
||||
// for (let {path, name} of files) {
|
||||
// console.log(`${this.jsonFolderPath}/${name}`);
|
||||
// fs.renameSync(path, `${this.jsonFolderPath}/${name}`);
|
||||
// }
|
||||
|
||||
// temp.cleanupSync();
|
||||
// return ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, {
|
||||
// "files": JSON.stringify(files)
|
||||
// });
|
||||
// } catch (err) {
|
||||
// console.log(err)
|
||||
// return ctx.body = ctx.service.utils.resResult(STATUS.INTERNAL_ERR);
|
||||
// }
|
||||
|
||||
// } else {
|
||||
// return ctx.body = ctx.service.utils.resResult(STATUS.GM_UPLOAD_FORMAT_ERR);
|
||||
// }
|
||||
}
|
||||
|
||||
public async reloadResource() {
|
||||
const { ctx } = this;
|
||||
|
||||
try {
|
||||
|
||||
reloadResources();
|
||||
ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { isOK: true });
|
||||
return;
|
||||
} catch(e) {
|
||||
ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { isOK: false, err: e.stack });
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function childExec(commond: string) {
|
||||
return new Promise((resolve, reject) => {
|
||||
exec(commond, function(error, stdout, stderr){
|
||||
if(error) {
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
console.log('stdout: ' + stdout);
|
||||
console.log('stderr: ' + typeof stderr);
|
||||
resolve(stdout);
|
||||
});
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user