Mit Cloud Storage for Firebase können Sie schnell und einfach Dateien aus einem von Firebase bereitgestellten und verwalteten Cloud Storage-Bucket herunterladen.
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 untergeordnete Pfade an den Stamm Ihres Cloud Storage-Buckets anhängen. Alternativ können Sie 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 aus Cloud Storage auf vier Arten herunterladen:
- Über eine URL herunterladen
- In ein Byte-Array herunterladen
- Download mit Stream
- In eine lokale Datei herunterladen
Die Methode, mit der Sie Ihre Dateien abrufen, hängt davon ab, wie Sie die Daten in Ihrem Spiel verwenden möchten.
Über eine URL herunterladen
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 Sie 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. } });
In ein Byte-Array herunterladen
Mit der Methode GetBytesAsync()
können Sie die Datei in einen Bytepuffer im Arbeitsspeicher herunterladen.
Bei dieser Methode wird der gesamte Inhalt Ihrer Datei in den Arbeitsspeicher geladen.
Wenn Sie eine Datei anfordern, die größer ist als der für Ihre App verfügbare Arbeitsspeicher, stürzt Ihre App ab.
Um Speicherprobleme zu vermeiden, sollten Sie die maximale Größe auf einen Wert festlegen, den Ihre App verarbeiten kann, oder eine andere Downloadmethode verwenden.
// 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
Wenn Sie die Datei mit einem Stream herunterladen, können Sie die Daten verarbeiten, während sie geladen werden.
So haben Sie maximale Flexibilität bei der Verarbeitung Ihres Downloads. Rufen Sie GetStreamAsync()
auf und übergeben Sie Ihren eigenen Streamprozessor als erstes Argument.
Dieser Delegat wird in einem Hintergrundthread mit einem Stream aufgerufen, mit dem Sie latenzintensive Vorgänge oder Berechnungen wie das Speichern des Inhalts auf der Festplatte ausführen können.
// 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()
akzeptiert optionale Argumente nach dem Streamprozessor, mit denen Sie den Vorgang abbrechen oder über den Fortschritt benachrichtigt werden können.
In eine lokale Datei herunterladen
Mit der Methode GetFileAsync()
wird eine Datei direkt auf ein lokales Gerät heruntergeladen. Verwenden Sie diese Option, wenn Ihre Nutzer 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 entspricht der Standardschnittstelle System.IProgress<T>
. Sie können eine Instanz der Klasse StorageProgress
verwenden, um Ihre eigene Action<T>
als Callback für Fortschrittstick zu verwenden.
// 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 beheben
Es gibt eine Reihe von Gründen, warum beim Herunterladen Fehler auftreten können. Dazu gehören, dass die Datei nicht vorhanden ist oder der Nutzer keine Berechtigung hat, auf die gewünschte Datei zuzugreifen. Weitere Informationen zu Fehlern finden Sie in der Dokumentation im Abschnitt Fehlerbehandlung.
Nächste Schritte
Sie können auch Metadaten für Dateien abrufen und aktualisieren, die in Cloud Storage gespeichert sind.