Skip to content
BunBase BunBase BunBase Docs Alpha v0.1.0

Storage — Flutter SDK

import 'dart:typed_data';
final bytes = Uint8List.fromList([/* ... */]);
final file = await bunbase.storage.upload(
'avatars', // bucket name
'photo.jpg', // destination filename
bytes,
mimeType: 'image/jpeg',
);
print(file.url);
import 'dart:io';
final file = File('/path/to/image.jpg');
final bytes = await file.readAsBytes();
final record = await bunbase.storage.upload('avatars', 'image.jpg', bytes,
mimeType: 'image/jpeg');
final record = await bunbase.storage.upload(
'videos',
'clip.mp4',
bytes,
mimeType: 'video/mp4',
onProgress: (double progress) {
setState(() => _uploadProgress = progress); // 0.0 → 1.0
},
);

Pass additional metadata alongside the file:

await bunbase.storage.upload(
'documents',
'contract.pdf',
bytes,
mimeType: 'application/pdf',
fields: {'folder': 'legal', 'owner': userId},
);
final Uint8List bytes = await bunbase.storage.download('avatars', 'photo.jpg');
await bunbase.storage.delete('avatars', 'photo.jpg');
final files = await bunbase.storage.list('avatars');
// With prefix filter:
final profilePics = await bunbase.storage.list('avatars', prefix: 'users/');

Generate a short-lived URL for direct client access (default TTL: 1 hour):

final result = await bunbase.storage.getSignedUrl('avatars', 'photo.jpg');
print(result.url); // https://cdn.example.com/avatars/photo.jpg?token=...
// Custom TTL:
final result = await bunbase.storage.getSignedUrl(
'avatars',
'photo.jpg',
ttl: const Duration(minutes: 15),
);
FieldTypeDescription
idStringUnique record ID
bucketStringBucket name
nameStringFilename
sizeintSize in bytes
mimeTypeStringMIME type
urlStringPublic URL (or signed URL path)
createdAtStringISO-8601 timestamp