useUploadTask
newFile 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
| Param | Type | Description |
|---|---|---|
upload | (path, file, options?) => Promise<result | null> | Start the upload. |
progress | number | Upload progress 0–100. |
state | 'idle' | 'running' | 'paused' | 'success' | 'error' | Current upload state. |
result | StorageUploadResult | null | Upload result after completion. |
error | unknown | null | Error if upload failed. |
pause | () => void | Pause the active upload. |
resume | () => void | Resume a paused upload. |
cancel | () => void | Cancel the active upload. |