import { NextRequest, NextResponse } from "next/server"; import { downloadDolceFile, downloadLocalFile } from "@/lib/dolce-v2/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 }); // 로컬 파일 다운로드 처리 if (String(fileId).startsWith("LOCAL_")) { const { buffer, fileName: localFileName } = await downloadLocalFile(fileId); return new NextResponse(buffer, { headers: { "Content-Type": "application/octet-stream", "Content-Disposition": `attachment; filename*=UTF-8''${encodeURIComponent(localFileName)}`, "Content-Length": buffer.byteLength.toString(), }, }); } // 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 } ); } }