A robust, feature-rich file upload component for Svelte applications integrated with Firebase Storage. Supports drag-and-drop, progress tracking, resumable uploads, validation, health checks, and more.
Install the package and its dependencies via npm:
npm i svelte-firebase-upload firebase
This installs the core upload manager and Firebase SDK.
Create a Firebase project and get your config from the Firebase console. In your Svelte component (e.g., +page.svelte
):
<script lang="ts">
import { initializeApp } from 'firebase/app';
import { getStorage } from 'firebase/storage';
import DragAndDrop from 'svelte-firebase-upload/drag-and-drop.svelte'; // Adjust path if needed
const firebaseConfig = {
// Your Firebase config here
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_PROJECT.firebaseapp.com",
projectId: "YOUR_PROJECT_ID",
storageBucket: "YOUR_PROJECT.appspot.com",
messagingSenderId: "YOUR_SENDER_ID",
appId: "YOUR_APP_ID"
};
let storage;
$effect(() => {
const app = initializeApp(firebaseConfig);
storage = getStorage(app);
});
</script>
<DragAndDrop
{storage}
uploadPath="uploads/"
autoStart={true}
maxFileSize={50 * 1024 * 1024} // 50MB
allowedFileTypes={['.jpg', '.png', '.pdf']} // Customize as needed
/>
Drop the <DragAndDrop>
component into your page. It handles file drops, uploads to Firebase Storage, and displays progress/lists.
For advanced usage, access the underlying FirebaseUploadManager
instance for custom control (e.g., pause/resume).
Props for <DragAndDrop>
:
storage
: Firebase Storage instance (required).uploadPath
: Base path in Storage (default: 'uploads/').autoStart
: Start uploads automatically (default: true).maxFileSize
: Max file size in bytes (default: 50MB).allowedFileTypes
: Array of extensions/mimes (default: images).showFileTypeError
: Show errors for invalid types (default: true).Manager config (passed internally, customizable via extension):
maxConcurrentUploads
: Default 4.chunkSize
: Default 1MB.retryAttempts
: Default 3.enableSmartScheduling
: Default true.maxBandwidthMbps
: Default 10.$state
, etc.).git clone [repo-url]
npm install
npm run dev
MIT License. See LICENSE for details.
Pull requests welcome! For major changes, open an issue first.