// pages/api/upload.js import mime from "mime"; import { join } from "path"; import { stat, mkdir, writeFile } from "fs/promises"; import * as dateFn from "date-fns"; import response from "@/lib/res"; export async function POST(req) { const formData = await req.formData(); const file = formData.get("file"); if (!file) { return response({ msg: "请选择文件上传" }, "err"); } const buffer = Buffer.from(await file.arrayBuffer()); const relativeUploadDir = `/uploads/${dateFn.format( Date.now(), "yyyy-MM-dd" )}`; const uploadDir = join(process.cwd(), "public", relativeUploadDir); //找文件夹 未找到->创建 try { await stat(uploadDir); } catch (e) { if (e.code === "ENOENT") { await mkdir(uploadDir, { recursive: true }); } else { return response({ msg: "当上传文件时创建文件夹失败" }, "err"); } } //写入文件到指定日期到文件夹 try { const uniqueSuffix = `${Date.now()}-${Math.round(Math.random() * 1e9)}`; const filename = `${file.name.replace( /\.[^/.]+$/, "" )}-${uniqueSuffix}.${mime.getExtension(file.type)}`; await writeFile(`${uploadDir}/${filename}`, buffer); return response( { fileUrl: `${relativeUploadDir}/${filename}`, fileName: file.name }, "上传成功" ); } catch (e) { return response({ msg: "文件上传失败" }, "err"); } }