"use client"; import { useUploadThing } from "@/utils/uploadthing"; import { File, X } from "lucide-react"; import { useState } from "react"; import { useDropzone } from "react-dropzone"; export default function Uploader() { const [files, setFiles] = useState([]); const [previews, setPreviews] = useState>([]); const [progress, setProgress] = useState(0); const onDrop = (_files: File[]) => { setFiles([...(files || []), ..._files]); setPreviews([ ...(previews || []), ..._files.map((file) => URL.createObjectURL(file)), ]); }; const { getRootProps, getInputProps } = useDropzone({ onDrop, accept: { "image/*": [], }, }); const { startUpload, isUploading } = useUploadThing("imageUploader", { onUploadProgress(p) { setProgress(p); }, }); const handleUpload = () => startUpload(files); return (

Simple File Uploader Test

Upload files

{previews.map((preview, i) => (
{ URL.revokeObjectURL(preview); }} />
))}
{isUploading ?

{progress}%

: null}
); }