import { NextResponse } from 'next/server'; import { writeFile, mkdir } from 'fs/promises'; import path from 'path'; export async function POST(request: Request) { try { const formData = await request.formData(); const file = formData.get('file') as File; if (!file) { return NextResponse.json({ error: 'No file received.' }, { status: 400 }); } const buffer = Buffer.from(await file.arrayBuffer()); // Strip special characters to prevent URL breaking const safeName = file.name.replace(/[^a-zA-Z0-9.-]/g, '_'); const filename = `${Date.now()}-${safeName}`; // Save to data/uploads instead of public/uploads const uploadDir = path.join(process.cwd(), 'data', 'uploads'); await mkdir(uploadDir, { recursive: true }); await writeFile(path.join(uploadDir, filename), buffer); // Return a dynamic API route URL instead of a static path return NextResponse.json({ url: `/api/files?name=${filename}` }, { status: 201 }); } catch (error) { console.error('Upload Error:', error); return NextResponse.json({ error: 'Failed to upload image.' }, { status: 500 }); } }