Documentation menu

Required Props

UpupUploader can run as a local file collector with no upload target. In that case users select files and you read the selected File objects from callbacks or hooks.

For actual uploads, configure exactly one target:

PropTypeUse
uploadEndpointstringClient-hosted presign route. The browser requests an upload URL, then uploads bytes directly to storage.
serverUrlstringServer-hosted upup route from @upupjs/server. Your server owns provider calls, storage credentials, and transfer policy.
resumable.endpointstringExternal tus service endpoint when resumable={{ protocol: 'tus', endpoint }} is used.

provider is required only when the selected target or server handler needs to know which storage backend to use.

Client upload target

tsx
import { UpupUploader } from '@upupjs/react'
import '@upupjs/react/styles'

export default function Uploader() {
    return <UpupUploader provider="aws" uploadEndpoint="/api/upload-token" />
}

The presign request body includes file details plus optional metadata:

ts
type PresignRequest = {
    name: string
    type: string
    size: number
    metadata?: Record<string, unknown>
}

The response must include the upload URL and may include signed upload headers:

ts
type PresignedUrlResponse = {
    key: string
    uploadUrl: string
    uploadHeaders?: Record<string, string>
    publicUrl?: string
    downloadUrl?: string
    expiresIn: number
}

Server upload target

tsx
<UpupUploader provider="aws" mode="server" serverUrl="/api/upup" />

serverUrl should point to a handler created by @upupjs/server.