import path from "path"; import { gSuccess, gFail, uploadDir, uploadPath } from "@/util"; const fs = require("fs"); const multiparty = require("multiparty"); const FileType = require("file-type"); function saveFile(file) { return new Promise(async (resolve, reject) => { const filename = file.originalFilename; const uploadedPath = file.path; const filetype = await FileType.fromFile(uploadedPath); console.log(filetype); if (filetype && (filetype.ext == "jpg" || filetype.ext == "png")) { const dstPath = path.resolve(uploadDir, filename); fs.rename(uploadedPath, dstPath, function (err) { if (err) { console.log("rename error: " + err); reject(); } else { resolve(uploadPath + "/" + filename); } }); } else { fs.unlinkSync(uploadedPath); reject(new Error(filename + "文件不是图片")); } }); } export default function (req, h) { const form = new multiparty.Form({ uploadDir: uploadDir, //路径需要对应自己的项目更改 /*设置文件保存路径 */ encoding: "utf-8", /*编码设置 */ maxFilesSize: 20000 * 1024 * 1024, /*设置文件最大值 20MB */ keepExtensions: true, /*保留后缀*/ }); return new Promise(async (resolve, reject) => { form.on("part", function (part) { console.log(part.filename); }); form.on("progress", function (bytesReceived, bytesExpected) { if (bytesExpected === null) { return; } var percentComplete = (bytesReceived / bytesExpected) * 100; console.log( "the form is " + Math.floor(percentComplete) + "%" + " complete" ); }); form.parse(req.payload, async function (err, fields, files) { // console.log(err, fields, files); if (err) { resolve(err.message); return; } const errList = []; const fileList = []; for (let i = 0; i < files.file.length; i++) { const file = files.file[i]; try { const dstPath = await saveFile(file); fileList.push(dstPath); } catch (error) { errList.push(error.message); } } if (errList.length) { resolve(gFail(null, errList.join("\n"))); return; } // resolve(h.view("views/upload.ejs")); resolve([...new Set(fileList)]); }); }); }