import { NextRequest, NextResponse } from "next/server" import { writeFile, mkdir } from "fs/promises" import { existsSync } from "fs" import path from "path" export async function POST(request: NextRequest) { try { const formData = await request.formData() const rfqId = formData.get("rfqId") as string const file = formData.get("file") as File if (!rfqId) { return NextResponse.json( { message: "RFQ ID가 필요합니다." }, { status: 400 } ) } if (!file) { return NextResponse.json( { message: "파일이 선택되지 않았습니다." }, { status: 400 } ) } // 파일 크기 검증 if (file.size > 10 * 1024 * 1024) { // 10MB return NextResponse.json( { message: `파일이 너무 큽니다. (최대 10MB)` }, { status: 400 } ) } // 업로드 디렉토리 생성 const uploadDir = path.join(process.cwd(), "public", "uploads", "rfq", rfqId) if (!existsSync(uploadDir)) { await mkdir(uploadDir, { recursive: true }) } // 고유한 파일명 생성 (타임스탬프 + 원본명) const timestamp = Date.now() const sanitizedName = file.name.replace(/[^a-zA-Z0-9.-]/g, "_") const fileName = `${timestamp}_${sanitizedName}` const filePath = `/uploads/rfq/${rfqId}/${fileName}` const fullPath = path.join(uploadDir, fileName) // 파일 저장 const buffer = Buffer.from(await file.arrayBuffer()) await writeFile(fullPath, buffer) return NextResponse.json({ fileName, originalFileName: file.name, filePath, fileSize: file.size, fileType: file.type || path.extname(file.name).slice(1), }) } catch (error) { console.error("File upload error:", error) return NextResponse.json( { message: "파일 업로드 중 오류가 발생했습니다." }, { status: 500 } ) } }