Cloud Storage dla Firebase umożliwia szybkie i łatwe pobieranie plików z zasobnika Cloud Storage udostępnianego i zarządzanego przez Firebase.
Utwórz odniesienie
Aby pobrać plik, najpierw utwórz odniesienie do Cloud Storage dla pliku, który chcesz pobrać.
Możesz utworzyć odniesienie, dołączając ścieżki podrzędne do katalogu głównego zasobnika Cloud Storage lub możesz utworzyć odniesienie z istniejącego adresu URL gs://
lub https://
odnoszą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");
Pobierz pliki
Po uzyskaniu referencji możesz pobierać pliki z Cloud Storage na cztery sposoby:
- Pobierz z adresu URL
- Pobierz do tablicy bajtów
- Pobierz za pomocą strumienia
- Pobierz do pliku lokalnego
Metoda, której użyjesz do odzyskania plików, będzie zależeć od tego, w jaki sposób chcesz wykorzystać dane w grze.
Pobierz z adresu URL
Jeśli chcesz użyć adresu URL z WWW
Unity lub UnityWebRequest
, 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. } });
Pobierz do tablicy bajtów
Plik można pobrać do buforu bajtów w pamięci przy użyciu metody GetBytesAsync()
. Ta metoda załaduje całą zawartość pliku do pamięci. Jeśli poprosisz o plik większy niż dostępna pamięć aplikacji, aplikacja ulegnie awarii. Aby zabezpieczyć się przed problemami z pamięcią, ustaw maksymalny rozmiar na taki, jaki obsługuje Twoja aplikacja, 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!"); } });
Pobierz przez strumień
Pobranie pliku ze strumieniem umożliwia przetwarzanie danych w momencie ich załadowania. Zapewnia to maksymalną elastyczność w zakresie pobierania. Wywołaj funkcję GetStreamAsync()
i jako pierwszy argument przekaż swój własny procesor strumieniowy. Ten delegat zostanie wywołany w wątku w tle ze strumieniem, który umożliwia wykonywanie operacji lub obliczeń wymagających dużych opóźnień, takich jak przechowywanie 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()
pobiera opcjonalne argumenty po procesorze strumieniowym, co pozwala anulować operację lub uzyskać powiadomienie o postępie.
Pobierz do pliku lokalnego
Metoda GetFileAsync()
pobiera plik bezpośrednio na urządzenie lokalne. Użyj tej opcji, jeśli użytkownicy chcą mieć dostęp do pliku w trybie offline lub udostępnić plik 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ć słuchaczy do pobranych plików, aby monitorować postęp pobierania. Odbiornik korzysta ze standardowego interfejsu System.IProgress<T>
. Możesz użyć instancji klasy StorageProgress
, aby udostępnić 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
Istnieje wiele powodów, dla których mogą wystąpić błędy podczas pobierania, na przykład nieistniejący plik lub brak uprawnień dostępu użytkownika do żądanego pliku. Więcej informacji na temat błędów można znaleźć w sekcji Obsługiwanie błędów w dokumentacji.
Następne kroki
Możesz także pobierać i aktualizować metadane plików przechowywanych w Cloud Storage.