Cloud Storage for Firebase umożliwia szybkie i łatwe pobieranie plików z Cloud Storage zasobnika udostępnianego i zarządzanego przez Firebase.
Tworzenie referencji
Aby pobrać plik, najpierw utwórz Cloud Storage referencję do pliku, który chcesz pobrać.
Referencję możesz utworzyć, dodając ścieżki podrzędne do katalogu głównego zasobnika
Cloud Storage lub utworzyć referencję z istniejącego
gs:// lub https:// adresu URL odwołującego się do obiektu w 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");
Pobieranie plików
Gdy masz referencję, możesz pobierać pliki z Cloud Storage na 4 sposoby:
- Pobieranie z adresu URL
- Pobieranie do tablicy bajtów
- Pobieranie za pomocą strumienia
- Pobieranie do pliku lokalnego
Metoda pobierania plików będzie zależeć od tego, jak chcesz wykorzystywać dane w grze.
Pobieranie z adresu URL
Jeśli chcesz użyć adresu URL z WWW lub UnityWebRequest w Unity, możesz
uzyskać adres URL pobierania pliku, wywołując 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. } });
Pobieranie do tablicy bajtów
Możesz pobrać plik do bufora bajtów w pamięci za pomocą metody GetBytesAsync().
Ta metoda wczyta całą zawartość pliku do pamięci.
Jeśli poprosisz o plik większy niż dostępna pamięć aplikacji, aplikacja ulegnie awarii.
Aby zapobiec problemom z pamięcią, ustaw maksymalny rozmiar na wartość, którą aplikacja może obsłużyć, lub użyj innej metody pobierania.
// 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!"); } });
Pobieranie za pomocą strumienia
Pobieranie pliku za pomocą strumienia umożliwia przetwarzanie danych podczas ich wczytywania.
Daje to maksymalną elastyczność podczas pobierania. Wywołaj GetStreamAsync() i przekaż własny procesor strumienia jako pierwszy argument.
Ten delegat zostanie wywołany w wątku w tle ze strumieniem, który umożliwia wykonywanie operacji lub obliczeń wymagających dużej ilości czasu, takich jak zapisywanie zawartości na dysku.
// 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() przyjmuje opcjonalne argumenty po procesorze strumienia, które umożliwiają anulowanie operacji lub otrzymywanie powiadomień o postępie.
Pobieranie do pliku lokalnego
Metoda GetFileAsync() pobiera plik bezpośrednio na urządzenie lokalne. Użyj tej metody, jeśli użytkownicy chcą mieć dostęp do pliku w trybie offline lub udostępniać go w innej aplikacji.
// 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."); } });
Możesz dołączyć odbiorniki do pobierania, aby monitorować postęp pobierania. Odbiornik jest zgodny ze standardowym System.IProgress<T>
interfejsem. Możesz użyć instancji klasy StorageProgress, aby podać
własną Action<T> jako wywołanie zwrotne dla znaczników postępu.
// 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."); } });
Obsługa błędów
Błędy podczas pobierania mogą wystąpić z wielu powodów, m.in. z powodu braku pliku lub braku uprawnień użytkownika do dostępu do żądanego pliku. Więcej informacji o błędach znajdziesz w sekcji Obsługa błędów w dokumentacji.
Następne kroki
Możesz też pobierać i aktualizować metadane plików przechowywanych w Cloud Storage.