Mit Cloud Storage for Firebase können Sie schnell und einfach Dateien aus einem Cloud Storage-Bucket herunterladen, der von Firebase bereitgestellt und verwaltet wird.
Referenz erstellen
Wenn Sie eine Datei herunterladen möchten, müssen Sie zuerst eine Cloud Storage-Referenz für die Datei erstellen, die Sie herunterladen möchten.
Sie können eine Referenz erstellen, indem Sie dem Stammverzeichnis Ihres Cloud Storage-Buckets untergeordnete Pfade anhängen. Sie können auch eine Referenz über eine vorhandene 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 von Cloud Storage herunterladen:
- Über eine URL herunterladen
- In ein Byte-Array herunterladen
- Download mit Stream
- In eine lokale Datei herunterladen
Welche Methode Sie zum Abrufen Ihrer Dateien verwenden, hängt davon ab, wie Sie die Daten in Ihrem Spiel verwenden möchten.
Über eine URL herunterladen
Wenn du eine URL mit WWW
oder UnityWebRequest
von Unity verwenden möchtest, kannst du eine Download-URL für eine Datei abrufen, indem du GetDownloadUrlAsync()
aufrufst.
// 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. } });
In ein Byte-Array herunterladen
Sie können die Datei mit der Methode GetBytesAsync()
in einen Byte-Puffer im Arbeitsspeicher herunterladen.
Bei dieser Methode wird der gesamte Inhalt der Datei in den Arbeitsspeicher geladen.
Wenn Sie eine Datei anfordern, die größer als der verfügbare Arbeitsspeicher Ihrer App ist, stürzt die App ab.
Um Speicherprobleme zu vermeiden, legen Sie die maximale Größe auf einen Wert fest, den Ihre App verarbeiten kann, oder verwenden Sie eine andere Downloadmethode.
// 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!"); } });
Über einen Stream herunterladen
Wenn Sie die Datei mit einem Stream herunterladen, können Sie die Daten während des Ladens verarbeiten.
So haben Sie maximale Flexibilität beim Umgang mit Ihrem Download. Rufe GetStreamAsync()
auf und übergebe deinen eigenen Streamprozessor als erstes Argument.
Dieser Delegate wird in einem Hintergrund-Thread mit einem Stream aufgerufen, wodurch 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()
nimmt nach dem Streamprozessor optionale Argumente entgegen, mit denen du den Vorgang abbrechen oder über den Fortschritt informiert werden kannst.
In eine lokale Datei herunterladen
Mit der GetFileAsync()
-Methode wird eine Datei direkt auf ein lokales Gerät heruntergeladen. Verwenden Sie diese Option, wenn Ihre Nutzer offline auf die Datei zugreifen oder sie 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 verfolgen. Der Listener folgt der standardmäßigen System.IProgress<T>
-Schnittstelle. Du kannst eine Instanz der Klasse StorageProgress
verwenden, um deinen eigenen Action<T>
als Rückruf für Fortschrittsmarkierungen anzugeben.
// 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 verarbeiten
Es kann verschiedene Gründe dafür geben, dass beim Download Fehler auftreten. Beispielsweise kann die Datei nicht vorhanden sein oder der Nutzer hat keine Berechtigung zum Zugriff auf die gewünschte Datei. Weitere Informationen zu Fehlern finden Sie im Abschnitt Fehler beheben der Dokumentation.
Nächste Schritte
Sie können auch Metadaten für Dateien abrufen und aktualisieren, die in Cloud Storage gespeichert sind.