Spaces:
Paused
Paused
| import { NextRequest, NextResponse } from "next/server"; | |
| import { writeFile, mkdir } from "fs/promises"; | |
| import { join } from "path"; | |
| import { existsSync } from "fs"; | |
| const UPLOAD_DIR = join(process.cwd(), "uploads"); | |
| const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB | |
| // Ensure upload directory exists | |
| async function ensureUploadDir() { | |
| if (!existsSync(UPLOAD_DIR)) { | |
| await mkdir(UPLOAD_DIR, { recursive: true }); | |
| } | |
| } | |
| export async function POST(request: NextRequest) { | |
| try { | |
| const formData = await request.formData(); | |
| const file = formData.get("file") as File; | |
| if (!file) { | |
| return NextResponse.json( | |
| { error: "No file provided" }, | |
| { status: 400 } | |
| ); | |
| } | |
| // Check file size | |
| if (file.size > MAX_FILE_SIZE) { | |
| return NextResponse.json( | |
| { error: "File too large. Maximum size is 10MB" }, | |
| { status: 400 } | |
| ); | |
| } | |
| // Ensure upload directory exists | |
| await ensureUploadDir(); | |
| // Generate unique file ID | |
| const fileId = crypto.randomUUID(); | |
| const bytes = await file.arrayBuffer(); | |
| const buffer = Buffer.from(bytes); | |
| // Save encrypted file | |
| const filePath = join(UPLOAD_DIR, fileId); | |
| await writeFile(filePath, buffer); | |
| return NextResponse.json({ | |
| fileId, | |
| size: file.size, | |
| name: file.name, | |
| type: file.type, | |
| }); | |
| } catch (error) { | |
| console.error("Upload error:", error); | |
| return NextResponse.json( | |
| { error: "Upload failed" }, | |
| { status: 500 } | |
| ); | |
| } | |
| } | |