Get upload URL
GitHubAuthenticated API-route helper that validates a file, creates its metadata, and returns a presigned URL for Form uploads.
Installation
bash
pnpm dlx shadcn@latest add @cs/get-upload-urlUsage
tsx
import { NextRequest, NextResponse } from "next/server"
import { actionResult } from "@/lib/cs/action-result"
import { getS3FileUploadUrl } from "@/lib/cs/get-upload-url"
import { filesConnector } from "@/lib/files"tsx
export async function GET(request: NextRequest) {
const user = await authenticated({ noRedirect: true })
if (!user) return NextResponse.json(actionResult(false, "Unauthorized"), { status: 401 })
const params = request.nextUrl.searchParams
const name = params.get("name")
const type = params.get("type")
const size = Number(params.get("size"))
const dependentFiles = (params.get("dependent") ?? "").split(",").filter(Boolean)
if (!name || !type || !Number.isFinite(size) || size < 0) {
return NextResponse.json(actionResult(false, "Missing or invalid file parameters"), { status: 400 })
}
const result = await getS3FileUploadUrl({
name,
type,
size,
dependentFiles,
userId: user.id,
filesConnector,
})
return NextResponse.json(result, { status: result.success ? 200 : 400 })
}API Reference
getS3FileUploadUrl
Validates a client-selected file, creates its persisted metadata through a FilesConnector, and returns the presigned S3 upload URL. Call it only from an authenticated GET route used by Form.uploadUrlApiPath. When a validation or creation step fails, it deletes the UUIDs supplied in dependentFiles so a partially uploaded form does not leave orphaned files.
Props
| Name | Type | Default | Description |
|---|---|---|---|
| dependentFiles * | string[] | - | UUIDs of earlier uploaded files to remove if this request fails. |
| filesConnector * | FilesConnector | - | Connector that persists file metadata and creates upload URLs. |
| name * | string | - | Original name of the selected file. |
| size * | number | - | Size of the selected file in bytes. |
| type * | string | - | MIME type declared by the selected file. |
| userId * | number | - | ID of the user that owns the uploaded file. |