WhisperNet / app /api /upload /route.ts
bonesmasher's picture
Upload 56 files
abc1805 verified
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 }
);
}
}