route.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { NextRequest, NextResponse } from "next/server";
  2. import { PrismaClient } from "@prisma/client";
  3. const prisma = new PrismaClient();
  4. export const POST = async (req: NextRequest) => {
  5. try {
  6. const formData = await req.formData();
  7. const body = Object.fromEntries(formData);
  8. const file = (body.file as File) || null;
  9. if (!file) {
  10. return NextResponse.json({
  11. success: false,
  12. error: "No file provided",
  13. }, { status: 400 });
  14. }
  15. // Convert file to buffer
  16. const buffer = Buffer.from(await file.arrayBuffer());
  17. // Store file in database
  18. const savedFile = await prisma.file.create({
  19. data: {
  20. filename: file.name,
  21. mimetype: file.type,
  22. size: file.size,
  23. data: buffer,
  24. },
  25. });
  26. return NextResponse.json({
  27. success: true,
  28. file: {
  29. id: savedFile.id,
  30. filename: savedFile.filename,
  31. mimetype: savedFile.mimetype,
  32. size: savedFile.size,
  33. createdAt: savedFile.createdAt,
  34. },
  35. });
  36. } catch (error) {
  37. console.error("Upload error:", error);
  38. return NextResponse.json({
  39. success: false,
  40. error: "Failed to upload file",
  41. }, { status: 500 });
  42. } finally {
  43. await prisma.$disconnect();
  44. }
  45. };