Upload A File To Storage
utilcn/upload-fileFreeComponent
Upload a file to a storage provider using a presigned upload URL.
Install it
npx shadcn@latest add https://utilcn.dev/r/upload-file.jsonSource
1'use client';23import { type ChangeEvent, useState } from 'react';4import { useUploadFile } from '@/registry/default/storage/use-upload-file';56export function UploadFile() {7 const [progress, setProgress] = useState(0);8 const [isUploading, setIsUploading] = useState(false);9 const { uploadFile } = useUploadFile();1011 const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => {12 const file = e.target.files?.[0];13 if (!file) {14 return;15 }1617 setIsUploading(true);18 uploadFile({19 file,20 onProgress: (p: number) => setProgress(p),21 onSuccess: (url: string) => {22 console.log('Uploaded to:', url);23 setIsUploading(false);24 setProgress(0);25 },26 onError: (err: Error) => {27 console.error(`Upload failed: ${err.message}`);28 setIsUploading(false);29 setProgress(0);30 },31 });32 };3334 return (35 <div className="flex flex-col gap-4">36 <input37 className="file:mr-4 file:rounded-md file:border-0 file:bg-secondary file:px-4 file:py-2 file:font-semibold file:text-secondary-foreground file:text-sm hover:file:bg-secondary/80"38 onChange={handleFileChange}39 type="file"40 />4142 {isUploading && (43 <div className="mt-4 flex items-center gap-2">44 <div className="h-2 w-full rounded-full bg-secondary">45 <div46 className="h-2 rounded-full bg-primary transition-all duration-300"47 style={{ width: `${progress}%` }}48 />49 </div>50 <span className="text-muted-foreground text-sm">{progress}%</span>51 </div>52 )}53 </div>54 );55}
What it pulls in
npm packages
Files it writes
More from utilcn
All 17 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Download A File From Storagedownload-file | utilcn | Components | Free | 2 deps · 2 files | |
| Upload Multiple Filesupload-multiple-files | utilcn | Components | Free | no deps · 2 files |
