perf: 支持多文件上传

This commit is contained in:
xiaoxian521 2022-11-14 20:18:11 +08:00
parent 4121375378
commit f31bf052a1
2 changed files with 47 additions and 19 deletions

2
.gitignore vendored
View File

@ -83,4 +83,4 @@ docs
.DS_Store .DS_Store
upload_tmp upload_tmp
public/images/ public/files/

View File

@ -9,6 +9,7 @@ import getFormatDate from "../utils/date";
import { connection } from "../utils/mysql"; import { connection } from "../utils/mysql";
import { Request, Response } from "express"; import { Request, Response } from "express";
import { createMathExpr } from "svg-captcha"; import { createMathExpr } from "svg-captcha";
const utils = require("@pureadmin/utils"); const utils = require("@pureadmin/utils");
/** 保存验证码 */ /** 保存验证码 */
@ -390,24 +391,51 @@ const searchVague = async (req: Request, res: Response) => {
// express-swagger-generator中没有文件上传文档写法所以请使用postman调试 // express-swagger-generator中没有文件上传文档写法所以请使用postman调试
const upload = async (req: Request, res: Response) => { const upload = async (req: Request, res: Response) => {
// 文件存放地址 // 文件存放地址
var des_file = "./public/images/" + req.files[0].originalname; const des_file: any = (index: number) =>
fs.readFile(req.files[0].path, function (err, data) { "./public/files/" + req.files[index].originalname;
fs.writeFile(des_file, data, function (err) { let filesLength = req.files.length as number;
let result = [];
function asyncUpload() {
return new Promise((resolve, rejects) => {
(req.files as Array<any>).forEach((ev, index) => {
fs.readFile(req.files[index].path, function (err, data) {
fs.writeFile(des_file(index), data, function (err) {
if (err) { if (err) {
res.json({ rejects(err);
success: false,
data: { message: Message[10] },
});
} else { } else {
while (filesLength > 0) {
result.push({
filename: req.files[filesLength - 1].originalname,
filepath: utils.getAbsolutePath(des_file(filesLength - 1)),
});
filesLength--;
}
if (filesLength === 0) resolve(result);
}
});
});
});
});
}
asyncUpload()
.then((fileList) => {
res.json({ res.json({
success: true, success: true,
data: { data: {
message: Message[11], message: Message[11],
filename: req.files[0].originalname, fileList,
filepath: utils.getAbsolutePath(des_file),
}, },
}); });
} })
.catch(() => {
res.json({
success: false,
data: {
message: Message[10],
fileList: [],
},
}); });
}); });
}; };