添加json上传功能
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import { Controller } from 'egg';
|
import { Controller } from 'egg';
|
||||||
|
import { Stream } from 'stream';
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const unzip = require("unzip-stream");
|
const unzip = require("unzip-stream");
|
||||||
const awaitWriteStream = require('await-stream-ready').write;
|
|
||||||
const temp = require('temp');
|
const temp = require('temp');
|
||||||
const compressing = require("compressing");
|
const compressing = require("compressing");
|
||||||
const moment = require("moment");
|
const moment = require("moment");
|
||||||
@@ -28,16 +28,26 @@ export default class UploadController extends Controller {
|
|||||||
fs.rmdirSync(path);
|
fs.rmdirSync(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private async readFileDir (dirPath) {
|
|
||||||
return new Promise((resolve:any, reject: any) => {
|
|
||||||
fs.readdir(dirPath, (err, files) => {
|
private getFileList (p: string, resultArr: Array<{path:string,name:string}>) {
|
||||||
if(err) {
|
console.log(p, fs.existsSync(p))
|
||||||
reject(err);
|
if( fs.existsSync(p) ) {
|
||||||
|
let files = fs.readdirSync(p);
|
||||||
|
console.log(p, files, resultArr);
|
||||||
|
files.forEach((file) =>{
|
||||||
|
let curPath = p + "/" + file;
|
||||||
|
// console.log(curPath, fs.statSync(curPath).isDirectory())
|
||||||
|
if(fs.statSync(curPath).isDirectory()) {
|
||||||
|
this.getFileList(curPath, resultArr);
|
||||||
} else {
|
} else {
|
||||||
resolve(files);
|
resultArr.push({
|
||||||
|
path: curPath,
|
||||||
|
name: file
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async upload() {
|
public async upload() {
|
||||||
@@ -53,11 +63,10 @@ export default class UploadController extends Controller {
|
|||||||
let dirPath = await temp.mkdir(folderName); // 临时文件夹
|
let dirPath = await temp.mkdir(folderName); // 临时文件夹
|
||||||
|
|
||||||
// 解压上传文件的stream
|
// 解压上传文件的stream
|
||||||
var unzipExtractor = unzip.Extract({ path: dirPath });
|
await this.doUnzipExtra(stream, dirPath);
|
||||||
await awaitWriteStream(stream.pipe(unzipExtractor)); // 异步写入文件
|
|
||||||
|
|
||||||
console.log('读取文件');
|
console.log('读取文件');
|
||||||
let files:any = await this.readFileDir(dirPath);
|
let files:any = fs.readdirSync(dirPath);
|
||||||
let msg = '', result = '';
|
let msg = '', result = '';
|
||||||
for(let file of files) {
|
for(let file of files) {
|
||||||
let flag = false;
|
let flag = false;
|
||||||
@@ -87,7 +96,7 @@ export default class UploadController extends Controller {
|
|||||||
console.log('历史记录压缩移动');
|
console.log('历史记录压缩移动');
|
||||||
let isEmpty = true;
|
let isEmpty = true;
|
||||||
try {
|
try {
|
||||||
let oldFiles:any = await this.readFileDir(hotUpdateAddr);
|
let oldFiles:any = fs.readdirSync(hotUpdateAddr);
|
||||||
console.log(oldFiles.length);
|
console.log(oldFiles.length);
|
||||||
isEmpty = oldFiles.length <= 0;
|
isEmpty = oldFiles.length <= 0;
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
@@ -137,4 +146,70 @@ export default class UploadController extends Controller {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async doUnzipExtra(stream: Stream, dirPath: string) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
// 解压上传文件的stream
|
||||||
|
var unzipExtractor = unzip.Extract({ path: dirPath });
|
||||||
|
unzipExtractor.on('close', function() {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
|
||||||
|
unzipExtractor.on('close', function(e) {
|
||||||
|
reject(e);
|
||||||
|
});
|
||||||
|
|
||||||
|
stream.pipe(unzipExtractor); // 异步写入文件
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private jsonFolderName = 'resource';
|
||||||
|
private jsonFolderPath = `/root/zyz/shared/${this.jsonFolderName}`;
|
||||||
|
|
||||||
|
public async uploadJson() {
|
||||||
|
const { ctx } = this;
|
||||||
|
const stream = await ctx.getFileStream();
|
||||||
|
// 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 = {
|
||||||
|
"status": "ok",
|
||||||
|
"data": "上传成功",
|
||||||
|
"files": JSON.stringify(files)
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err)
|
||||||
|
return ctx.body = {
|
||||||
|
"status": "error",
|
||||||
|
"data": err.message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return ctx.body = {
|
||||||
|
"status": "error",
|
||||||
|
"data": "格式错误"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ export default (app: Application) => {
|
|||||||
router.post('/api/get_route', controller.login.getMenu);
|
router.post('/api/get_route', controller.login.getMenu);
|
||||||
router.get('/api/currentUser', tokenParser, controller.login.currentUser);
|
router.get('/api/currentUser', tokenParser, controller.login.currentUser);
|
||||||
router.post('/api/upload/hotupdate', tokenParser, controller.upload.upload);
|
router.post('/api/upload/hotupdate', tokenParser, controller.upload.upload);
|
||||||
|
router.post('/api/upload/uploadjson', tokenParser, controller.upload.uploadJson);
|
||||||
|
|
||||||
router.post('/api/gmaccount/getgmlist', tokenParser, controller.gmaccount.getGmList);
|
router.post('/api/gmaccount/getgmlist', tokenParser, controller.gmaccount.getGmList);
|
||||||
router.post('/api/gmaccount/createaccount',tokenParser, controller.gmaccount.createGmAccount);
|
router.post('/api/gmaccount/createaccount',tokenParser, controller.gmaccount.createGmAccount);
|
||||||
|
|||||||
@@ -18,6 +18,10 @@ export default class BattleRecord extends BaseModel {
|
|||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
battleId: number; // 关卡 id
|
battleId: number; // 关卡 id
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
|
warName: string; // 关卡 名
|
||||||
|
@prop({ required: true })
|
||||||
|
warType: number; // 关卡 类型
|
||||||
|
@prop({ required: true })
|
||||||
status: number; // 关卡状态 0-挑战中 1-挑战成功 2-挑战失败
|
status: number; // 关卡状态 0-挑战中 1-挑战成功 2-挑战失败
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
record: { // 使用的武将等记录
|
record: { // 使用的武将等记录
|
||||||
|
|||||||
Reference in New Issue
Block a user