Spaces:
Paused
Paused
// src/app/api/datasets/upload/route.ts | |
import { NextRequest, NextResponse } from 'next/server'; | |
import { writeFile, mkdir } from 'fs/promises'; | |
import { join } from 'path'; | |
import { getDatasetsRoot } from '@/server/settings'; | |
export async function POST(request: NextRequest) { | |
try { | |
const datasetsPath = await getDatasetsRoot(); | |
if (!datasetsPath) { | |
return NextResponse.json({ error: 'Datasets path not found' }, { status: 500 }); | |
} | |
const formData = await request.formData(); | |
const files = formData.getAll('files'); | |
const datasetName = formData.get('datasetName') as string; | |
if (!files || files.length === 0) { | |
return NextResponse.json({ error: 'No files provided' }, { status: 400 }); | |
} | |
// Create upload directory if it doesn't exist | |
const uploadDir = join(datasetsPath, datasetName); | |
await mkdir(uploadDir, { recursive: true }); | |
const savedFiles = await Promise.all( | |
files.map(async (file: any) => { | |
const bytes = await file.arrayBuffer(); | |
const buffer = Buffer.from(bytes); | |
// Clean filename and ensure it's unique | |
const fileName = file.name.replace(/[^a-zA-Z0-9.-]/g, '_'); | |
const filePath = join(uploadDir, fileName); | |
await writeFile(filePath, buffer); | |
return fileName; | |
}), | |
); | |
return NextResponse.json({ | |
message: 'Files uploaded successfully', | |
files: savedFiles, | |
}); | |
} catch (error) { | |
console.error('Upload error:', error); | |
return NextResponse.json({ error: 'Error uploading files' }, { status: 500 }); | |
} | |
} | |
// Increase payload size limit (default is 4mb) | |
export const config = { | |
api: { | |
bodyParser: false, | |
responseLimit: '50mb', | |
}, | |
}; | |