← back to Letsbegin
app/api/upload/route.ts
69 lines
import { NextRequest, NextResponse } from 'next/server'
import { writeFile, mkdir } from 'fs/promises'
import path from 'path'
export async function POST(request: NextRequest) {
try {
const formData = await request.formData()
const file = formData.get('file') as File
const projectPath = formData.get('projectPath') as string
if (!file) {
return NextResponse.json({ error: 'No file provided' }, { status: 400 })
}
// Create uploads directory if it doesn't exist
const uploadsDir = projectPath
? path.join(projectPath, 'uploads')
: '/root/Projects/Letsbegin/uploads'
await mkdir(uploadsDir, { recursive: true })
// Generate unique filename
const timestamp = Date.now()
const safeName = file.name.replace(/[^a-zA-Z0-9.-]/g, '_')
const filename = `${timestamp}_${safeName}`
const filepath = path.join(uploadsDir, filename)
// Write file
const bytes = await file.arrayBuffer()
const buffer = Buffer.from(bytes)
await writeFile(filepath, buffer)
return NextResponse.json({
success: true,
filename,
filepath,
size: file.size,
type: file.type
})
} catch (error) {
console.error('Upload error:', error)
return NextResponse.json(
{ error: 'Failed to upload file' },
{ status: 500 }
)
}
}
export async function DELETE(request: NextRequest) {
try {
const { filepath } = await request.json()
if (!filepath || !filepath.includes('/uploads/')) {
return NextResponse.json({ error: 'Invalid filepath' }, { status: 400 })
}
const fs = await import('fs/promises')
await fs.unlink(filepath)
return NextResponse.json({ success: true })
} catch (error) {
console.error('Delete error:', error)
return NextResponse.json(
{ error: 'Failed to delete file' },
{ status: 500 }
)
}
}