RefirebaseRefirebase

useUploadTask

new

File upload hook with real-time progress, pause, resume, and cancel support.

Usage

useUploadTask wraps Firebase's uploadBytesResumable and exposes progress as a number from 0 to 100, plus control methods.

useUploadTask
import { useUploadTask } from 'refirebase/react';

function AvatarUploader() {
  const { upload, progress, state, result, error, pause, resume, cancel } = useUploadTask();

  const handleFile = async (e) => {
    const file = e.target.files[0];
    const uploadResult = await upload('avatars/' + file.name, file, {
      downloadUrl: true,
    });
    if (uploadResult) {
      console.log('Uploaded:', uploadResult.downloadUrl);
    }
  };

  return (
    <div>
      <input type="file" onChange={handleFile} disabled={state === 'running'} />
      {state === 'running' && (
        <div>
          <progress value={progress} max={100} />
          <button onClick={pause}>Pause</button>
          <button onClick={cancel}>Cancel</button>
        </div>
      )}
      {state === 'paused' && <button onClick={resume}>Resume</button>}
      {state === 'success' && <p>Done! {result?.byteSize} bytes uploaded.</p>}
      {error && <p>Error: {String(error)}</p>}
    </div>
  );
}

Return value

ParamTypeDescription
upload(path, file, options?) => Promise<result | null>Start the upload.
progressnumberUpload progress 0–100.
state'idle' | 'running' | 'paused' | 'success' | 'error'Current upload state.
resultStorageUploadResult | nullUpload result after completion.
errorunknown | nullError if upload failed.
pause() => voidPause the active upload.
resume() => voidResume a paused upload.
cancel() => voidCancel the active upload.