diff options
Diffstat (limited to 'app/api/dolce/download/route.ts')
| -rw-r--r-- | app/api/dolce/download/route.ts | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/app/api/dolce/download/route.ts b/app/api/dolce/download/route.ts new file mode 100644 index 00000000..9d5eb601 --- /dev/null +++ b/app/api/dolce/download/route.ts @@ -0,0 +1,43 @@ +import { NextRequest, NextResponse } from "next/server"; +import { downloadDolceFile } from "@/lib/dolce/actions"; + +export async function POST(request: NextRequest) { + try { + const body = await request.json(); + const { fileId, userId, fileName } = body; + + if (!fileId || !userId || !fileName) { + return NextResponse.json( + { error: "필수 파라미터가 누락되었습니다" }, + { status: 400 } + ); + } + + console.log("[DOLCE Download API] 요청:", { fileId, userId, fileName }); + + // DOLCE API를 통해 파일 다운로드 + const { blob, fileName: downloadFileName } = await downloadDolceFile({ + fileId, + userId, + fileName, + }); + + // ArrayBuffer로 변환하여 Response 생성 + const arrayBuffer = await blob.arrayBuffer(); + + return new NextResponse(arrayBuffer, { + headers: { + "Content-Type": "application/octet-stream", + "Content-Disposition": `attachment; filename*=UTF-8''${encodeURIComponent(downloadFileName)}`, + "Content-Length": arrayBuffer.byteLength.toString(), + }, + }); + } catch (error) { + console.error("파일 다운로드 API 오류:", error); + return NextResponse.json( + { error: error instanceof Error ? error.message : "파일 다운로드 중 오류가 발생했습니다" }, + { status: 500 } + ); + } +} + |
