Files
ef_front/app/api/upload/route.ts

24 lines
869 B
TypeScript
Raw Normal View History

2025-09-07 22:57:43 +00:00
import { NextResponse } from "next/server";
import { mkdir, writeFile } from "fs/promises";
import path from "path";
import crypto from "crypto";
export const runtime = "nodejs"; // 파일 시스템 사용
export async function POST(req: Request) {
const form = await req.formData();
const file = form.get("file") as File | null;
if (!file) return NextResponse.json({ ok: false, error: "NO_FILE" }, { status: 400 });
const bytes = Buffer.from(await file.arrayBuffer());
const ext = (file.name.split(".").pop() || "png").toLowerCase();
const name = `${crypto.randomUUID()}.${ext}`;
const dir = path.join(process.cwd(), "public", "uploads");
await mkdir(dir, { recursive: true });
await writeFile(path.join(dir, name), bytes);
// 정적 서빙: public/uploads/...
const url = `/uploads/${name}`;
return NextResponse.json({ ok: true, url });
}