import { NextRequest, NextResponse } from 'next/server'; import { uploadFileToS3, generateFileKey } from '@/lib/s3'; export async function POST(request: NextRequest) { try { const formData = await request.formData(); const file = formData.get('file') as File; const folder = formData.get('folder') as string || 'uploads'; if (!file) { return NextResponse.json({ error: 'No file provided' }, { status: 400 }); } // Validate file type (images only) const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/gif']; if (!allowedTypes.includes(file.type)) { return NextResponse.json( { error: 'Invalid file type. Only images are allowed.' }, { status: 400 } ); } // Validate file size (max 5MB) const maxSize = 5 * 1024 * 1024; // 5MB if (file.size > maxSize) { return NextResponse.json( { error: 'File too large. Maximum size is 5MB.' }, { status: 400 } ); } // Generate unique key const key = generateFileKey(folder, file.name); // Upload to S3 const url = await uploadFileToS3({ file, key, contentType: file.type, }); return NextResponse.json({ url, key }, { status: 200 }); } catch (error) { console.error('Upload error:', error); return NextResponse.json( { error: 'Failed to upload file' }, { status: 500 } ); } }