iOS-Fotomediathek indexieren und in die eigene Cloud sichern: Supabase, S3, GCS, Azure, Firebase oder ein beliebiger HTTP-Endpunkt.
flutter pub add media_backupSnapshot
flutter pub add media_backup
status
version
score
platforms
Ein Flutter-Plugin, das die iOS-Fotomediathek in eine lokale SQLite-Datenbank einliest und die Medien an einen Speicher der Wahl hochlädt: Supabase, S3, GCS, Azure, Firebase oder ein eigener HTTP-Endpunkt.
Der erste Scan ist per Cursor wiederaufnehmbar, danach holen Folgescans nur noch, was seit dem letzten Lauf neu oder geändert ist. Ein Beobachter auf der Fotomediathek meldet Aufnahmen, Änderungen und Löschungen live. Extraktion (iCloud-Download, Temp-Datei) und Upload laufen in getrennten Pools, damit ein langsamer iCloud-Download keinen Upload-Platz blockiert. Die Nebenläufigkeit wird über ein Byte-Budget gesteuert statt über eine feste Anzahl Aufgaben.
Große Dateien laufen wiederaufnehmbar über TUS (Supabase) oder S3-Multipart. Fehler werden mit Backoff und Jitter wiederholt, dauerhafte Fehler markiert. Ein Stream liefert Fortschritt, Abschluss und Fehler je Asset ohne Polling. Start, Pause, Wiederholen, Statuszähler und Datenbank-Reset sind zur Laufzeit steuerbar.
Bisher nur iOS (ab 13.0), Android ist geplant. MIT-Lizenz.
dependencies:
media_backup: ^0.3.0await MediaBackup.configure(
settings: MediaBackupSettings(
enableDeltaObserver: true,
startUploader: true,
maxInFlightBytes: 300 * 1024 * 1024,
remoteFolder: 'my_app/user_42',
provider: const SupabaseUploadProvider(
projectUrl: 'https://<project>.supabase.co',
bucket: 'media-backup',
accessToken: '<token>',
),
),
);
final init = await MediaBackup.instance.initialize();
if (init.permissionGranted) {
await MediaBackup.instance.loadAssetsToDatabase();
}MediaBackup.instance.uploader.start();
MediaBackup.instance.uploader.pause();
await MediaBackup.instance.uploader.retryFailed();
final counts = await MediaBackup.instance.uploader.statusCounts();