route.ts 905 B

1234567891011121314151617181920212223242526272829
  1. import { NextResponse } from "next/server";
  2. import { put } from "@vercel/blob";
  3. export async function POST(request: Request) {
  4. try {
  5. const formData = await request.formData();
  6. const file = formData.get("file") as File;
  7. if (!file) {
  8. return NextResponse.json({ error: "No file provided" }, { status: 400 });
  9. }
  10. const filenameFromForm = formData.get("filename");
  11. const filename = filenameFromForm ? String(filenameFromForm) : file.name;
  12. const cleanFilename = filename.toLowerCase().replace(/[^a-z0-9.]/g, "-");
  13. const blob = await put(`game-engine/models/${cleanFilename}`, file, {
  14. access: "public",
  15. });
  16. return NextResponse.json({ url: blob.url, name: cleanFilename });
  17. } catch (error) {
  18. console.error("Failed to upload model:", error);
  19. return NextResponse.json(
  20. { error: "Failed to upload file" },
  21. { status: 500 },
  22. );
  23. }
  24. }