Cloud Storage for Firebase umożliwia szybkie i łatwe pobieranie plików z poziomu zasobnika Cloud Storage udostępnianego i zarządzanego przez Firebase.
Tworzenie referencji
Aby pobrać plik, najpierw utwórz odwołanie Cloud Storage do pliku, który chcesz pobrać.
Możesz utworzyć odwołanie, dodając ścieżki podrzędne do katalogu głównego zasobnika Cloud Storage. Możesz też utworzyć odwołanie z dotychczasowego adresu URL gs://
lub https://
, który odwołuje 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 plik referencyjny, możesz pobrać pliki z Cloud Storage na 4 sposoby:
- Pobieranie z adresu URL
- Pobieranie do tablicy bajtów
- Pobieranie z strumieniem
- Pobieranie do pliku lokalnego
Metoda pobierania plików zależy od tego, jak chcesz używać danych w grze.
Pobieranie z adresu URL
Jeśli chcesz użyć adresu URL z funkcją WWW
lub UnityWebRequest
w Unity, możesz uzyskać adres URL do pobrania pliku, wywołując funkcję 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, używając metody GetBytesAsync()
.
Ta metoda wczyta całą zawartość pliku do pamięci.
Jeśli żądasz pliku większego niż dostępna pamięć aplikacji, aplikacja ulegnie awarii.
Aby uniknąć problemów 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 w miarę ich wczytywania.
Daje to maksymalną elastyczność w zarządzaniu pobieraniem. Wywołaj funkcję GetStreamAsync()
i jako pierwszy argument prześlij własny procesor strumienia.
Ta metoda zostanie wywołana w wątku tła z strumieniem, co umożliwia wykonywanie operacji lub obliczeń wymagających dużej ilości czasu oczekiwania, takich jak zapisywanie treś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);
Funkcja GetStreamAsync()
przyjmuje opcjonalne argumenty po procesorze strumienia, które umożliwiają anulowanie operacji lub otrzymywanie powiadomień o jej postępach.
Pobieranie 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ć 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łączać do pobrań słuchaczy, aby monitorować postęp pobierania. Odbiornik korzysta ze standardowego interfejsu System.IProgress<T>
. Możesz użyć instancji klasy StorageProgress
, aby podać własną funkcję Action<T>
jako funkcję wywołania zwrotnego dla sygnałó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ępować z różnych powodów, m.in. dlatego, że plik nie istnieje lub użytkownik nie ma do niego dostępu. Więcej informacji o błędach znajdziesz w sekcji Przetwarzanie błędów w dokumentacji.
Następne kroki
Możesz też pobierać i aktualizować metadane w przypadku plików przechowywanych w Cloud Storage.