添加json上传功能
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { Controller } from 'egg';
|
||||
import { Stream } from 'stream';
|
||||
const fs = require('fs');
|
||||
const unzip = require("unzip-stream");
|
||||
const awaitWriteStream = require('await-stream-ready').write;
|
||||
const temp = require('temp');
|
||||
const compressing = require("compressing");
|
||||
const moment = require("moment");
|
||||
@@ -28,17 +28,27 @@ export default class UploadController extends Controller {
|
||||
fs.rmdirSync(path);
|
||||
}
|
||||
}
|
||||
private async readFileDir (dirPath) {
|
||||
return new Promise((resolve:any, reject: any) => {
|
||||
fs.readdir(dirPath, (err, files) => {
|
||||
if(err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(files);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
private getFileList (p: string, resultArr: Array<{path:string,name:string}>) {
|
||||
console.log(p, fs.existsSync(p))
|
||||
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 {
|
||||
resultArr.push({
|
||||
path: curPath,
|
||||
name: file
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public async upload() {
|
||||
const { ctx } = this;
|
||||
@@ -53,11 +63,10 @@ export default class UploadController extends Controller {
|
||||
let dirPath = await temp.mkdir(folderName); // 临时文件夹
|
||||
|
||||
// 解压上传文件的stream
|
||||
var unzipExtractor = unzip.Extract({ path: dirPath });
|
||||
await awaitWriteStream(stream.pipe(unzipExtractor)); // 异步写入文件
|
||||
await this.doUnzipExtra(stream, dirPath);
|
||||
|
||||
console.log('读取文件');
|
||||
let files:any = await this.readFileDir(dirPath);
|
||||
let files:any = fs.readdirSync(dirPath);
|
||||
let msg = '', result = '';
|
||||
for(let file of files) {
|
||||
let flag = false;
|
||||
@@ -87,7 +96,7 @@ export default class UploadController extends Controller {
|
||||
console.log('历史记录压缩移动');
|
||||
let isEmpty = true;
|
||||
try {
|
||||
let oldFiles:any = await this.readFileDir(hotUpdateAddr);
|
||||
let oldFiles:any = fs.readdirSync(hotUpdateAddr);
|
||||
console.log(oldFiles.length);
|
||||
isEmpty = oldFiles.length <= 0;
|
||||
} 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.get('/api/currentUser', tokenParser, controller.login.currentUser);
|
||||
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/createaccount',tokenParser, controller.gmaccount.createGmAccount);
|
||||
|
||||
Reference in New Issue
Block a user