first commit
This commit is contained in:
23
app/api/upload/route.ts
Normal file
23
app/api/upload/route.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
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 });
|
||||
}
|
||||
Reference in New Issue
Block a user