From 2acf5f8966a40c1c9a97680c8dc263ee3f1ad3d1 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Wed, 2 Jul 2025 00:45:49 +0000 Subject: (대표님/최겸) 20250702 변경사항 업데이트 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/richtext/route.ts | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 app/api/richtext/route.ts (limited to 'app/api/richtext') diff --git a/app/api/richtext/route.ts b/app/api/richtext/route.ts new file mode 100644 index 00000000..3d050dc5 --- /dev/null +++ b/app/api/richtext/route.ts @@ -0,0 +1,54 @@ +import { NextRequest, NextResponse } from 'next/server'; +import { writeFile, mkdir } from 'fs/promises'; +import { join } from 'path'; +import { randomUUID } from 'crypto'; + +export async function POST(req: NextRequest) { + try { + const formData = await req.formData(); + const file = formData.get('file') as File; + + console.log(file) + + if (!file) { + return NextResponse.json({ error: '파일이 없습니다.' }, { status: 400 }); + } + + // 파일 확장자 검증 + const allowedTypes = ['image/jpeg', 'image/png', 'image/webp', 'image/gif']; + if (!allowedTypes.includes(file.type)) { + return NextResponse.json({ error: '지원하지 않는 파일 형식입니다.' }, { status: 400 }); + } + + // 파일 크기 제한 (5MB) + if (file.size > 5 * 1024 * 1024) { + return NextResponse.json({ error: '파일 크기는 5MB 이하여야 합니다.' }, { status: 400 }); + } + + // 업로드 디렉토리 생성 + const uploadDir = join(process.cwd(), 'public', 'uploads', 'richtext'); + await mkdir(uploadDir, { recursive: true }); + + // 고유한 파일명 생성 + const fileExtension = file.name.split('.').pop(); + const fileName = `${randomUUID()}.${fileExtension}`; + const filePath = join(uploadDir, fileName); + + // 파일 저장 + const arrayBuffer = await file.arrayBuffer(); + await writeFile(filePath, new Uint8Array(arrayBuffer)); + + // 공개 URL 반환 + const fileUrl = `/uploads/richtext/${fileName}`; + + return NextResponse.json({ + success: true, + url: fileUrl, + message: '이미지가 성공적으로 업로드되었습니다.' + }); + + } catch (error) { + console.error('파일 업로드 실패:', error); + return NextResponse.json({ error: '파일 업로드에 실패했습니다.' }, { status: 500 }); + } +} \ No newline at end of file -- cgit v1.2.3