Spaces:
Runtime error
Runtime error
| import { NextResponse } from "next/server"; | |
| import { getSession } from "auth/server"; | |
| import { serverFileStorage, storageDriver } from "lib/file-storage"; | |
| import { checkStorageAction } from "../actions"; | |
| export async function POST(request: Request) { | |
| const session = await getSession(); | |
| if (!session?.user?.id) { | |
| return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); | |
| } | |
| // Check storage configuration first | |
| const storageCheck = await checkStorageAction(); | |
| if (!storageCheck.isValid) { | |
| return NextResponse.json( | |
| { | |
| error: storageCheck.error, | |
| solution: storageCheck.solution, | |
| storageDriver, | |
| }, | |
| { status: 500 }, | |
| ); | |
| } | |
| try { | |
| const formData = await request.formData(); | |
| const file = formData.get("file") as File; | |
| if (!file) { | |
| return NextResponse.json( | |
| { error: "No file provided. Use 'file' field in FormData." }, | |
| { status: 400 }, | |
| ); | |
| } | |
| // Read file content | |
| const arrayBuffer = await file.arrayBuffer(); | |
| const buffer = Buffer.from(arrayBuffer); | |
| // Upload to storage (works with any storage backend) | |
| const result = await serverFileStorage.upload(buffer, { | |
| filename: file.name, | |
| contentType: file.type || "application/octet-stream", | |
| }); | |
| return NextResponse.json({ | |
| success: true, | |
| key: result.key, | |
| url: result.sourceUrl, | |
| metadata: result.metadata, | |
| }); | |
| } catch (error) { | |
| console.error("Failed to upload file", error); | |
| return NextResponse.json( | |
| { error: "Failed to upload file" }, | |
| { status: 500 }, | |
| ); | |
| } | |
| } | |