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,26 +391,53 @@ 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;
if (err) { let result = [];
res.json({
success: false, function asyncUpload() {
data: { message: Message[10] }, 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) {
rejects(err);
} 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);
}
});
}); });
} else { });
res.json({ });
success: true, }
data: {
message: Message[11], asyncUpload()
filename: req.files[0].originalname, .then((fileList) => {
filepath: utils.getAbsolutePath(des_file), res.json({
}, success: true,
}); data: {
} message: Message[11],
fileList,
},
});
})
.catch(() => {
res.json({
success: false,
data: {
message: Message[10],
fileList: [],
},
});
}); });
});
}; };
/** /**