Cloud Storage dla Firebase umożliwia szybkie i łatwe pobieranie pliki z Cloud Storage udostępniane i zarządzane przez Firebase.
Tworzenie referencji
Aby pobrać plik, utwórz referencję Cloud Storage w pliku, który chcesz pobrać.
Odwołanie możesz utworzyć, dołączając ścieżki podrzędne do katalogu głównego
Cloud Storage lub możesz utworzyć odwołanie z istniejącego
Adres URL gs://
lub https://
odwołujący 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 będziesz mieć już plik referencyjny, możesz pobrać pliki z Cloud Storage na 4 sposoby.
- Pobierz z adresu URL
- Pobierz do tablicy bajtów
- Pobieranie ze strumieniem
- Pobieranie do pliku lokalnego
Metoda, której użyjesz do pobrania plików, zależy od tego, pobierają dane w grze.
Pobierz z adresu URL
Jeśli chcesz użyć adresu URL z parametrem WWW
lub UnityWebRequest
Unity,
uzyskać adres URL pobierania pliku, wywołując metodę 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żesz pobrać w buforze bajtów w pamięci za pomocą metody GetBytesAsync()
.
Ta metoda spowoduje wczytanie do pamięci całej zawartości pliku.
Jeśli zażądasz pliku, którego rozmiar przekracza dostępną pamięć aplikacji, aplikacja ulegnie awarii.
Aby zapobiec problemom z pamięcią, ustaw maksymalny rozmiar na jakiś
wiesz, że aplikacja poradzi sobie z zakupem aplikacji, albo użyć 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 ze strumienia
Pobranie pliku za pomocą strumienia umożliwia przetworzenie danych w momencie ich załadowania.
Zapewnia to maksymalną elastyczność podczas pobierania plików. Zadzwoń do nas
GetStreamAsync()
i jako pierwszy argument przekazać własny procesor strumienia.
Ten przedstawiciel zostanie wywołany w wątku w tle ze strumieniem, który
umożliwia wykonywanie operacji lub obliczeń intensywnych opóźnienia, takich jak
zapisując zawartość 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 za procesorem strumienia, który
pozwala anulować operację lub otrzymać powiadomienie o jej postępie.
Pobieranie do pliku lokalnego
Metoda GetFileAsync()
pobiera plik bezpośrednio na urządzenie lokalne. Należy go użyć, jeśli
użytkownicy chcą mieć dostęp do pliku offline lub udostępniać go
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."); } });
Aby monitorować postęp przesyłania, możesz dołączyć do pobranych plików detektory
pobierz. Detektor przestrzega standardowej reguły System.IProgress<T>
za pomocą prostego interfejsu online. Można użyć instancji klasy StorageProgress
, aby
Twój własny Action<T>
jako wywołanie zwrotne do informacji o postępach.
// 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 mogą występować przy pobieraniu z kilku powodów. Oto niektóre z nich: jeśli plik nie istnieje lub użytkownik nie ma uprawnień dostępu do żądanego pliku. Więcej informacji o błędach znajdziesz w Obsługa błędów sekcji dokumentów.
Następne kroki
Możesz też pobierać i aktualizować metadane. w przypadku plików przechowywanych w Cloud Storage.