Access storage methods via client.storage. Uploaded files are served from a public CDN — no extra configuration required.
Storage operations accept both pk_live_... and sk_live_... keys. Use pk_live_... in browser code for user-initiated uploads, and sk_live_... for server-side uploads. Never expose your secret key in browser code.
upload
Upload a file to storage.
upload(file: File | Blob | Buffer, filename?: string): Promise<UploadResponse>
Parameters
| Name | Type | Required | Description |
|---|
file | File | Blob | Buffer | Yes | The file to upload. |
filename | string | No | Override the stored filename. |
Returns (UploadResponse)
| Field | Type | Description |
|---|
url | string | Public CDN URL for the uploaded file. |
path | string | Storage path — required to delete the file later. |
provider | 'internal' | 'external' | Whether the file is stored on urBackend or your own Supabase. |
Store the path alongside the url in your database. You need it to delete the file.
Example — browser file input
const input = document.querySelector<HTMLInputElement>('input[type="file"]');
if (!input?.files?.length) {
throw new Error('No file selected');
}
const file = input.files[0];
const { url, path, provider } = await client.storage.upload(file);
console.log(url); // 'https://cdn.example.com/uploads/abc123.jpg'
console.log(provider); // 'internal'
deleteFile
Delete a previously uploaded file by its storage path.
deleteFile(path: string): Promise<{ deleted: boolean }>
Parameters
| Name | Type | Required | Description |
|---|
path | string | Yes | The path returned by upload(). |
Limits
| Limit | Value |
|---|
| Max file size | 10 MB per file |
| Total storage per project | 100 MB (Free Tier) |
Uploads that exceed 10 MB are rejected with a StorageError.