Cloud Storage for Firebase memungkinkan Anda mendownload file dengan cepat dan mudah dari bucket Cloud Storage yang disediakan dan dikelola oleh Firebase.
Membuat Referensi
Untuk mendownload file, buat referensi Cloud Storage terlebih dahulu ke file yang ingin didownload.
Anda dapat membuat referensi dengan menambahkan jalur turunan ke root bucket Cloud Storage, atau membuat referensi dari URL gs://
atau https://
yang sudah ada, yang mereferensikan suatu objek di Cloud Storage.
// Create a storage reference from our app
final storageRef = FirebaseStorage.instance.ref();
// Create a reference with an initial file path and name
final pathReference = storageRef.child("images/stars.jpg");
// Create a reference to a file from a Google Cloud Storage URI
final gsReference =
FirebaseStorage.instance.refFromURL("gs://YOUR_BUCKET/images/stars.jpg");
// Create a reference from an HTTPS URL
// Note that in the URL, characters are URL escaped!
final httpsReference = FirebaseStorage.instance.refFromURL(
"https://firebasestorage.googleapis.com/b/YOUR_BUCKET/o/images%20stars.jpg");
Mendownload File
Setelah memiliki referensi, Anda dapat mendownload file dari Cloud Storage
dengan memanggil getData()
atau getStream()
. Jika ingin mendownload file
dengan library lain, Anda bisa mendapatkan URL download dengan getDownloadUrl()
.
Mendownload di memori
Download file ke UInt8List
dengan metode getData()
. Ini adalah
cara termudah untuk mendownload file, tetapi cara ini harus memuat seluruh isi
file Anda ke dalam memori. Jika Anda meminta file yang lebih besar daripada kapasitas memori aplikasi yang tersedia, aplikasi akan mengalami error. Untuk melindungi dari masalah memori, getData()
menggunakan jumlah byte maksimum yang akan didownload. Setel ukuran maksimum ke kapasitas
yang Anda yakin bisa ditangani oleh aplikasi atau gunakan metode download lain.
final islandRef = storageRef.child("images/island.jpg");
try {
const oneMegabyte = 1024 * 1024;
final Uint8List? data = await islandRef.getData(oneMegabyte);
// Data for "images/island.jpg" is returned, use this as needed.
} on FirebaseException catch (e) {
// Handle any errors.
}
Mendownload ke file lokal
Metode writeToFile()
akan mendownload file secara langsung ke perangkat lokal. Gunakan metode ini
jika pengguna Anda ingin memiliki akses ke file saat offline atau membagikan file
di aplikasi lain. writeToFile()
akan menampilkan DownloadTask
yang dapat Anda gunakan untuk mengelola
download dan memantau status download.
final islandRef = storageRef.child("images/island.jpg");
final appDocDir = await getApplicationDocumentsDirectory();
final filePath = "${appDocDir.absolute}/images/island.jpg";
final file = File(filePath);
final downloadTask = islandRef.writeToFile(file);
downloadTask.snapshotEvents.listen((taskSnapshot) {
switch (taskSnapshot.state) {
case TaskState.running:
// TODO: Handle this case.
break;
case TaskState.paused:
// TODO: Handle this case.
break;
case TaskState.success:
// TODO: Handle this case.
break;
case TaskState.canceled:
// TODO: Handle this case.
break;
case TaskState.error:
// TODO: Handle this case.
break;
}
});
Mendownload Data melalui URL
Jika Anda sudah memiliki infrastruktur download berdasarkan URL, atau hanya ingin memiliki URL untuk dibagikan, Anda dapat memperoleh URL download untuk suatu file dengan memanggil metode getDownloadURL()
pada referensi Cloud Storage.
final imageUrl =
await storageRef.child("users/me/profile.png").getDownloadURL();
Menangani Error
Ada sejumlah alasan penyebab terjadinya error pada download, termasuk tidak adanya file atau pengguna tidak memiliki izin untuk mengakses file yang diinginkan. Informasi lebih lanjut mengenai error bisa dilihat di bagian Menangani Error pada dokumentasi.
Contoh Lengkap
Contoh lengkap download dengan penanganan error ditampilkan di bawah ini:
final islandRef = storageRef.child("images/island.jpg");
final appDocDir = await getApplicationDocumentsDirectory();
final filePath = "${appDocDir.absolute}/images/island.jpg";
final file = File(filePath);
final downloadTask = islandRef.writeToFile(file);
downloadTask.snapshotEvents.listen((taskSnapshot) {
switch (taskSnapshot.state) {
case TaskState.running:
// TODO: Handle this case.
break;
case TaskState.paused:
// TODO: Handle this case.
break;
case TaskState.success:
// TODO: Handle this case.
break;
case TaskState.canceled:
// TODO: Handle this case.
break;
case TaskState.error:
// TODO: Handle this case.
break;
}
});
Anda juga dapat mengambil dan memperbarui metadata untuk file yang disimpan di Cloud Storage.