24 lines
869 B
TypeScript
24 lines
869 B
TypeScript
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 });
|
|
}
|