Cloud Storage for Firebase, Firebase tarafından sağlanan ve yönetilen bir Cloud Storage paketinden dosyaları hızlı ve kolay bir şekilde indirmenize olanak tanır.
Referans Oluşturma
Bir dosyayı indirmek için öncelikle indirmek istediğiniz dosyaya Cloud Storage referansı oluşturun.
Cloud Storage paketine sahip olabilir veya mevcut bir paketten referans oluşturabilirsiniz
Cloud Storage içindeki bir nesneye referans veren gs://
veya https://
URL'si.
// 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");
Dosyaları İndir
Referans edindikten sonra dosyaları Cloud Storage hizmetinden indirebilirsiniz dört yöntem sunar:
- URL'den indir
- Bayt dizisine indir
- Video Akışıyla İndirme
- Yerel dosyaya indir
Dosyalarınızı almak için kullanacağınız yöntem, verilerinizi nasıl almak istediğinize nasıl tükettiğini gösterir.
URL'den indir
Unity'nin WWW
veya UnityWebRequest
ile bir URL kullanmak isterseniz şunu yapabilirsiniz:
GetDownloadUrlAsync()
numaralı telefonu arayarak bir dosyanın indirme URL'sini al.
// 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. } });
Bayt dizisine indir
Dosyayı, GetBytesAsync()
yöntemini kullanarak bellekteki bir bayt arabelleğine indirebilirsiniz.
Bu yöntem, dosyanızın tüm içeriğini belleğe yükler.
Uygulamanızın kullanılabilir belleğinden daha büyük bir dosya isterseniz uygulamanız kilitlenir.
Bellek sorunlarına karşı koruma sağlamak için maksimum boyutu belirli bir değere ayarladığınızdan emin olun
veya başka bir indirme yöntemi kullanabilirsiniz.
// 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!"); } });
Akış yoluyla indirme
Dosyayı bir Akış ile indirmek, verileri yüklenirken işlemenize olanak tanır.
Bu, indirme işleminizle ilgili maksimum esneklik sağlar. Telefonla arama
GetStreamAsync()
ve ilk bağımsız değişken olarak kendi akış işlemcinizi iletin.
Bu temsilci, akış içeren bir arka plan ileti dizisinde çağrılacaktır.
gibi gecikme yoğun işlemler veya hesaplamalar yapmanıza olanak tanır:
depolamaktan kaçınmalısınız.
// 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()
, akış işlemcisinden sonra isteğe bağlı bağımsız değişkenleri alır.
işlemi iptal etmenize veya işlemin ilerleme durumuyla ilgili bildirim almanıza olanak tanır.
Yerel dosyaya indir
GetFileAsync()
yöntemi, dosyayı doğrudan yerel bir cihaza indirir. Bu seçeneği aşağıdaki durumlarda kullanın:
Kullanıcılarınız çevrimdışıyken dosyaya erişmek veya dosyayı bir
ekleyebilirsiniz.
// 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."); } });
İndirme işleminin ilerleme durumunu izlemek için indirmelere dinleyici ekleyebilirsiniz. Dinleyici, standart System.IProgress<T>
arabirimini takip eder. Aşağıdakileri sağlamak için StorageProgress
sınıfının bir örneğini kullanabilirsiniz:
ilerleme göstergeleri için geri çağırma olarak kendi Action<T>
'nızı kullanın.
// 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."); } });
Hataları Giderme
İndirme sırasında hataların oluşmasının birkaç nedeni vardır: dosya mevcut değil veya kullanıcının istenen dosyaya erişim izni yok. Hatalarla ilgili daha fazla bilgiyi şurada bulabilirsiniz: Hataları İşleme bölümünde bulabilirsiniz.
Sonraki adımlar
Ayrıca meta verileri alıp güncelleyebilirsiniz Cloud Storage klasöründe depolanan dosyalar.