presenton/servers/nextjs/app/api/upload-image/route.ts

48 lines
No EOL
1.3 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server";
import path from "path";
import fs from "fs";
import crypto from "crypto";
const userDataDir = process.env.APP_DATA_DIRECTORY!;
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 }
);
}
const bytes = await file.arrayBuffer();
const buffer = Buffer.from(bytes);
// Create uploads directory if it doesn't exist
const uploadsDir = path.join(userDataDir, "uploads");
fs.mkdirSync(uploadsDir, { recursive: true });
// Generate unique filename
const filename = `${crypto.randomBytes(16).toString("hex")}.png`;
const filePath = path.join(uploadsDir, filename);
// Write file to disk
fs.writeFileSync(filePath, buffer);
// Return the relative path that can be used in the frontend
return NextResponse.json({
success: true,
filePath: `${uploadsDir}/${filename}`
});
} catch (error) {
console.error("Error saving image:", error);
return NextResponse.json(
{ error: "Failed to save image" },
{ status: 500 }
);
}
}