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.jsonUsage
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
filesUseFilesResult
A `useFiles()` instance — uploads through it.
UseFilesResultprefix?string
Key prefix (folder) for explicit keys, e.g. `"docs/"`. Empty = server mints keys.
stringaccept?string
`accept` attribute for the file input.
stringconcurrency?number
Parallel uploads. Default 3.
numberonUploaded?(entry: { key: string; name: string }) => void
(entry: { key: string; name: string }) => voidclassName?string
string