Cloud Storage for Firebase ermöglicht Ihnen das schnelle und einfache Herunterladen von Dateien aus einem Cloud Storage Bucket, der von Firebase bereitgestellt und verwaltet wird.
Referenz erstellen
Wenn Sie eine Datei herunterladen möchten, erstellen Sie zuerst eine Cloud Storage Referenz zur gewünschten Datei.
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
- 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.
Ü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
Sie können die Datei mit der Methode GetBytesAsync() in einen Bytepuffer im Arbeitsspeicher herunterladen.
Mit dieser Methode wird der gesamte Inhalt der Datei in den Arbeitsspeicher geladen.
Wenn Sie eine Datei anfordern, die größer ist als der verfügbare Arbeitsspeicher Ihrer App, stürzt die App ab.
Um Arbeitsspeicherprobleme 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 verarbeiten, während sie geladen werden.
So haben Sie maximale Flexibilität beim Download. 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 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() 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 Methode, 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 überwachen. Der Listener folgt der StandardSystem.IProgress<T>
Schnittstelle. Sie können eine Instanz der Klasse StorageProgress verwenden, um
Ihre eigene Action<T> als Callback für Fortschritts-Ticks 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."); } });
Fehlerbehebung
Es gibt eine Reihe von Gründen, warum beim Download Fehler auftreten können, z. B. wenn die Datei nicht vorhanden ist oder der Nutzer keine Berechtigung hat, auf die gewünschte Datei zuzugreifen. Weitere Informationen zu Fehlern finden Sie im Abschnitt Fehlerbehebung in der Dokumentation.
Nächste Schritte
Sie können auch Metadaten abrufen und aktualisieren für Dateien, die in Cloud Storage gespeichert sind.