|
- 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 });
- }
- }
|