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 pathReference = storage.GetReference("images/stars.jpg"); // Create a reference from a Google Cloud Storage URI StorageReference gsReference = storage.GetReferenceFromUrl("gs://bucket/images/stars.jpg"); // Create a reference from an HTTPS URL // Note that in the URL, characters are URL escaped! StorageReference httpsReference = 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 empat cara:
- Mendownload dari URL
- Mendownload file ke byte array
- Mendownload file melalui Stream
- Mendownload ke file lokal
Metode pengambilan file yang akan digunakan tergantung pada cara Anda menggunakan data dalam game.
Mendownload dari URL
Jika ingin menggunakan URL dengan WWW
atau UnityWebRequest
pada Unity, Anda dapat memperoleh URL download ke suatu file dengan memanggil GetDownloadUrlAsync()
.
// Fetch the download URL reference.GetDownloadUrlAsync().ContinueWithOnMainThread(task => { if (!task.IsFaulted && !task.IsCanceled) { Debug.Log("Download URL: " + task.Result); // ... now download the file via WWW or UnityWebRequest. } });
Mendownload file ke byte array
Anda dapat mendownload file ke buffering byte dalam memori menggunakan metode GetBytesAsync()
.
Metode ini akan memuat seluruh konten file ke dalam memori.
Jika Anda meminta file yang lebih besar daripada kapasitas memori aplikasi yang tersedia, aplikasi akan mengalami error.
Untuk menghindari hal ini, pastikan untuk menyetel ukuran maksimum ke nilai yang Anda tahu mampu ditangani oleh aplikasi, atau gunakan metode download lainnya.
// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes) const long maxAllowedSize = 1 * 1024 * 1024; reference.GetBytesAsync(maxAllowedSize).ContinueWithOnMainThread(task => { if (task.IsFaulted || task.IsCanceled) { Debug.LogException(task.Exception); // Uh-oh, an error occurred! } else { byte[] fileContents = task.Result; Debug.Log("Finished downloading!"); } });
Mendownload file melalui Stream
Mendownload file dengan Stream memungkinkan Anda memproses data begitu data dimuat.
Dengan metode ini, Anda memiliki fleksibilitas maksimum untuk menangani proses download. Panggil
GetStreamAsync()
dan teruskan stream processor Anda sebagai argumen pertama.
Delegasi ini akan dipanggil di thread latar belakang dengan Stream, sehingga Anda dapat menjalankan operasi atau kalkulasi yang sarat latensi, seperti menyimpan konten ke disk.
// Download via a Stream reference.GetStreamAsync(stream => { // Do something with the stream here. // // This code runs on a background thread which reduces the impact // to your framerate. // // If you want to do something on the main thread, you can do that in the // progress eventhandler (second argument) or ContinueWith to execute it // at task completion. }, null, CancellationToken.None);
GetStreamAsync()
mengambil argumen opsional setelah stream processor yang
mengizinkan Anda membatalkan operasi atau mendapatkan pemberitahuan mengenai progresnya.
Mendownload ke file lokal
Metode GetFileAsync()
akan mendownload file secara langsung ke perangkat lokal. Gunakan metode ini
jika pengguna ingin mengakses file saat sedang offline
atau membagikan file di aplikasi lain.
// Create local filesystem URL string localUrl = "file:///local/images/island.jpg"; // Download to the local filesystem reference.GetFileAsync(localUrl).ContinueWithOnMainThread(task => { if (!task.IsFaulted && !task.IsCanceled) { Debug.Log("File downloaded."); } });
Anda dapat menambahkan pemroses ke download untuk memantau progresnya. Pemroses mengikuti antarmuka System.IProgress<T>
standar. Anda dapat menggunakan instance class StorageProgress
untuk menyediakan Action<T>
Anda sendiri sebagai callback untuk memantau progres.
// Create local filesystem URL string localUrl = "file:///local/images/island.jpg"; // Start downloading a file Task task = reference.GetFileAsync(localFile, new StorageProgress<DownloadState>(state => { // called periodically during the download Debug.Log(String.Format( "Progress: {0} of {1} bytes transferred.", state.BytesTransferred, state.TotalByteCount )); }), CancellationToken.None); task.ContinueWithOnMainThread(resultTask => { if (!resultTask.IsFaulted && !resultTask.IsCanceled) { Debug.Log("Download finished."); } });
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.