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 attachmentId = formData.get("attachmentId") as string const file = formData.get("file") as File const isRevision = formData.get("isRevision") as string if (!attachmentId) { return NextResponse.json( { message: "첨부파일 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 } ) } // 업로드 디렉토리 생성 (첨부파일 ID별) const uploadDir = path.join(process.cwd(), "public", "uploads", "rfq", "revisions", attachmentId) 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/revisions/${attachmentId}/${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 } ) } }