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 Anda download.
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 objek di Cloud Storage.
// Create a reference with an initial file path and name StorageReference path_reference = storage->GetReference("images/stars.jpg"); // Create a reference from a Cloud Storage URI StorageReference gs_reference = storage->GetReferenceFromUrl("gs://bucket/images/stars.jpg"); // Create a reference from an HTTPS URL // Note that in the URL, characters are URL escaped! StorageReference https_reference = storage->GetReferenceFromUrl("https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg");
Mendownload File
Setelah memiliki referensi, Anda dapat mendownload file dari Cloud Storage dengan tiga cara:
- Mendownload ke buffering di memori
- Mendownload ke lokasi tertentu di perangkat
- Membuat URL string yang mewakili file online
Mendownload di memori
Download file ke buffering byte di memori menggunakan metode GetBytes()
. Ini adalah
cara termudah untuk mendownload file dengan cepat, tetapi cara ini akan memuat seluruh konten file Anda
ke dalam memori. Jika Anda meminta file yang lebih besar dari memori yang tersedia, aplikasi akan berhenti bekerja. Agar tidak terjadi masalah pada memori, pastikan untuk menyetel ukuran maksimum dengan nilai yang Anda tahu bisa ditangani oleh aplikasi ini atau gunakan metode download lainnya.
// Create a reference to the file you want to download StorageReference island_ref = storage_ref.Child("images/island.jpg"); // Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes) const size_t kMaxAllowedSize = 1 * 1024 * 1024 int8_t byte_buffer[kMaxAllowedSize]; firebase::Future<size_t> future = island_ref.GetBytes(byte_buffer, kMaxAllowedSize);
Pada saat itu, permintaan telah dibuat, tetapi harus menunggu Future selesai untuk dapat membaca nilai. Karena game biasanya dijalankan dalam loop, dan kurang digerakkan callback dibanding aplikasi lain, Anda biasanya akan menanyakan penyelesaian.
// In the game loop that polls for the result... if (future.status() != firebase::kFutureStatusPending) { if (future.status() != firebase::kFutureStatusComplete) { LogMessage("ERROR: GetBytes() returned an invalid future."); // Handle the error... } else if (future.Error() != firebase::storage::kErrorNone) { LogMessage("ERROR: GetBytes() returned error %d: %s", future.Error(), future.error_message()); // Handle the error... } else { // byte_buffer is now populated with data for "images/island.jpg" } }
Mendownload ke file lokal
Metode GetFile()
akan mendownload file secara langsung ke perangkat lokal. Gunakan metode ini jika pengguna ingin mengakses file ketika sedang offline atau membagikan file ke aplikasi lain.
// Create a reference to the file you want to download StorageReference islandRef = storage_ref.Child("images/island.jpg"]; // Create local filesystem URL const char* local_url = "file:///local/images/island.jpg"; // Download to the local filesystem Future<size_t> future = islandRef.GetFile(local_url); // Wait for Future to complete... if (future.Error() != firebase::storage::kErrorNone) { // Uh-oh, an error occurred! } else { // The file has been downloaded to local file URL "images/island.jpg" }
GetFile()
menggunakan argumen Controller
opsional yang dapat Anda gunakan untuk mengelola download. Baca bagian Mengelola Download untuk
mengetahui informasi lebih lanjut.
Membuat URL download
Jika Anda sudah memiliki infrastruktur download berdasarkan URL, atau hanya ingin memiliki URL untuk dibagikan, Anda bisa mendapatkan URL download untuk suatu file dengan memanggil metode GetDownloadUrl()
pada referensi Cloud Storage.
// Create a reference to the file you want to download StorageReference stars_ref = storage_ref.Child("images/stars.jpg"); // Fetch the download URL firebase::Future<std::string> future = stars_ref.GetDownloadUrl(); // Wait for Future to complete... if (future.Error() != firebase::storage::kErrorNone) { // Uh-oh, an error occurred! } else { // Get the download URL for 'images/stars.jpg' std::string download_url = future.Result(); }
Mengelola Download
Selain memulai download, Anda dapat menjeda, melanjutkan, dan membatalkan download
menggunakan metode Pause()
, Resume()
, dan Cancel()
di
Controller
, yang dapat Anda teruskan secara opsional ke metode GetBytes()
atau GetFile()
.
// Start downloading a file Controller controller; storage_ref.Child("images/mountains.jpg").GetFile(local_file, nullptr, &controller); // Pause the download controller.Pause(); // Resume the download controller.Resume(); // Cancel the download controller.Cancel();
Memantau Progres Download
Anda dapat menempelkan pemroses ke download untuk memantau prosesnya.
class MyListener : public firebase::storage::Listener { public: virtual void OnProgress(firebase::storage::Controller* controller) { // A progress event occurred } }; { // Start uploading a file MyEventListener my_listener; storage_ref.Child("images/mountains.jpg").GetFile(local_file, my_listener); }
Menangani Error
Ada sejumlah penyebab terjadinya error pada download, termasuk tidak adanya file atau pengguna tidak memiliki izin untuk mengakses file yang diinginkan. Informasi lebih lanjut mengenai error dapat ditemukan di bagian Menangani Error pada dokumen.
Langkah Berikutnya
Anda juga dapat mengambil dan memperbarui metadata untuk file yang disimpan di Cloud Storage.