Skip to content
Files SDK
Esc
navigateopen⌘Jpreview
On this page

Multipart Uploader

A multi-file queue uploader with bounded concurrency, live per-file progress and cancel — large files chunk into a multipart upload automatically.

A heavier-duty uploader for many or large files. Queue files, upload them with bounded concurrency, watch each one’s progress, and cancel everything in flight. Files large enough to warrant it are chunked into a multipart upload by the gateway transparently — the browser just streams the bytes.

"use client";

import { demoFiles } from "@/lib/demo-files";
import { MultipartUploader } from "@/registry/files-sdk/multipart-uploader/multipart-uploader";

const Example = () => {
  const files = demoFiles;

  return <MultipartUploader files={files} prefix="demo/" />;
};

export default Example;

Installation

npx shadcn@latest add https://files-sdk.dev/r/multipart-uploader.json

Usage

import { useFiles } from "files-sdk/react";

import { MultipartUploader } from "@/components/files-sdk/multipart-uploader";

export function BulkUploader() {
  const files = useFiles({ endpoint: "/api/files" });

  return <MultipartUploader files={files} prefix="uploads/" concurrency={3} />;
}

Cancel calls files.abort(), aborting every in-flight request the hook started; the queue re-arms automatically on the next upload.

Props

PropType
filesUseFilesResult

A `useFiles()` instance — uploads through it.

TypeUseFilesResult
prefix?string

Key prefix (folder) for explicit keys, e.g. `"docs/"`. Empty = server mints keys.

Typestring
accept?string

`accept` attribute for the file input.

Typestring
concurrency?number

Parallel uploads. Default 3.

Typenumber
onUploaded?(entry: { key: string; name: string }) => void
Type(entry: { key: string; name: string }) => void
className?string
Typestring

Was this page helpful?