Mit Cloud Storage for Firebase können Sie schnell und einfach Dateien aus einem von Firebase bereitgestellten und verwalteten Cloud Storage- Bucket herunterladen.
Erstellen Sie eine Referenz
Um eine Datei herunterzuladen, erstellen Sie zunächst einen Cloud Storage-Verweis auf die Datei, die Sie herunterladen möchten.
Sie können eine Referenz erstellen, indem Sie untergeordnete Pfade an das Stammverzeichnis Ihres Cloud Storage-Buckets anhängen, oder Sie können eine Referenz aus einer vorhandenen gs://
oder https://
URL erstellen, die auf ein Objekt in Cloud Storage verweist.
// 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");
Dateien herunterladen
Sobald Sie eine Referenz haben, können Sie Dateien auf vier Arten aus Cloud Storage herunterladen:
- Herunterladen von einer URL
- Laden Sie in ein Byte-Array herunter
- Mit einem Stream herunterladen
- In eine lokale Datei herunterladen
Die Methode, die Sie zum Abrufen Ihrer Dateien verwenden, hängt davon ab, wie Sie die Daten in Ihrem Spiel nutzen möchten.
Herunterladen von einer URL
Wenn Sie eine URL mit WWW
oder UnityWebRequest
von Unity verwenden möchten, können Sie eine Download-URL für eine Datei abrufen, indem GetDownloadUrlAsync()
aufrufen.
// 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. } });
Laden Sie in ein Byte-Array herunter
Sie können die Datei mit der GetBytesAsync()
Methode in einen Bytepuffer im Arbeitsspeicher herunterladen. Diese Methode lädt den gesamten Inhalt Ihrer Datei in den Speicher. Wenn Sie eine Datei anfordern, die größer ist als der verfügbare Speicher Ihrer App, stürzt Ihre App ab. Stellen Sie zum Schutz vor Speicherproblemen sicher, dass die maximale Größe auf einen Wert eingestellt ist, von dem Sie wissen, dass Ihre App damit umgehen kann, oder verwenden Sie eine andere Download-Methode.
// 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!"); } });
Download über einen Stream
Durch das Herunterladen der Datei mit einem Stream können Sie die Daten beim Laden verarbeiten. Dies gibt Ihnen maximale Flexibilität im Umgang mit Ihrem Download. Rufen Sie GetStreamAsync()
auf und übergeben Sie Ihren eigenen Stream-Prozessor als erstes Argument. Dieser Delegat wird in einem Hintergrundthread mit einem Stream aufgerufen, mit dem Sie latenzintensive Vorgänge oder Berechnungen ausführen können, z. B. das Speichern des Inhalts auf der Festplatte.
// 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()
nach dem Stream-Prozessor ein optionales Argument, mit dem Sie den Vorgang abbrechen oder sich über den Fortschritt benachrichtigen lassen können.
In eine lokale Datei herunterladen
Die GetFileAsync()
Methode lädt eine Datei direkt auf ein lokales Gerät herunter. Verwenden Sie dies, wenn Ihre Benutzer offline auf die Datei zugreifen oder die Datei in einer anderen App freigeben möchten.
// 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."); } });
Sie können Listener an Downloads anhängen, um den Fortschritt des Downloads zu überwachen. Der Listener folgt der Standardschnittstelle System.IProgress<T>
. Sie können eine Instanz der StorageProgress
-Klasse verwenden, um Ihre eigene Action<T>
als Rückruf für Fortschrittsticks bereitzustellen.
// 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."); } });
Fehler behandeln
Es gibt eine Reihe von Gründen, warum beim Herunterladen Fehler auftreten können, einschließlich der Datei, die nicht vorhanden ist, oder des Benutzers, der keine Berechtigung hat, auf die gewünschte Datei zuzugreifen. Weitere Informationen zu Fehlern finden Sie im Abschnitt Fehler behandeln der Dokumentation.
Nächste Schritte
Sie können auch Metadaten für Dateien abrufen und aktualisieren , die in Cloud Storage gespeichert sind.