summaryrefslogtreecommitdiff
path: root/app/api/upload/rfq-attachment-revision
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-06-13 07:08:01 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-06-13 07:08:01 +0000
commitc72d0897f7b37843109c86f61d97eba05ba3ca0d (patch)
tree887dd877f3f8beafa92b4d9a7b16c84b4a5795d8 /app/api/upload/rfq-attachment-revision
parentff902243a658067fae858a615c0629aa2e0a4837 (diff)
(대표님) 20250613 16시 08분 b-rfq, document 등
Diffstat (limited to 'app/api/upload/rfq-attachment-revision')
-rw-r--r--app/api/upload/rfq-attachment-revision/route.ts67
1 files changed, 67 insertions, 0 deletions
diff --git a/app/api/upload/rfq-attachment-revision/route.ts b/app/api/upload/rfq-attachment-revision/route.ts
new file mode 100644
index 00000000..a7dd4117
--- /dev/null
+++ b/app/api/upload/rfq-attachment-revision/route.ts
@@ -0,0 +1,67 @@
+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 }
+ )
+ }
+} \ No newline at end of file