import { NextRequest, NextResponse } from "next/server"; import { writeFile, mkdir } from "fs/promises"; import { join } from "path"; import { existsSync } from "fs"; const UPLOAD_DIR = join(process.cwd(), "uploads"); const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB // Ensure upload directory exists async function ensureUploadDir() { if (!existsSync(UPLOAD_DIR)) { await mkdir(UPLOAD_DIR, { recursive: true }); } } export async function POST(request: NextRequest) { try { const formData = await request.formData(); const file = formData.get("file") as File; if (!file) { return NextResponse.json( { error: "No file provided" }, { status: 400 } ); } // Check file size if (file.size > MAX_FILE_SIZE) { return NextResponse.json( { error: "File too large. Maximum size is 10MB" }, { status: 400 } ); } // Ensure upload directory exists await ensureUploadDir(); // Generate unique file ID const fileId = crypto.randomUUID(); const bytes = await file.arrayBuffer(); const buffer = Buffer.from(bytes); // Save encrypted file const filePath = join(UPLOAD_DIR, fileId); await writeFile(filePath, buffer); return NextResponse.json({ fileId, size: file.size, name: file.name, type: file.type, }); } catch (error) { console.error("Upload error:", error); return NextResponse.json( { error: "Upload failed" }, { status: 500 } ); } }