Dateien mit Cloud Storage for Unity herunterladen

Mit Cloud Storage for Firebase können Sie Dateien schnell und einfach aus einem von Firebase bereitgestellten und verwalteten Cloud Storage-Bucket herunterladen.

Referenz erstellen

Wenn Sie eine Datei herunterladen möchten, erstellen Sie zuerst eine Cloud Storage-Referenz auf die Datei, 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:

  1. Über eine URL herunterladen
  2. In ein Byte-Array herunterladen
  3. Über Stream herunterladen
  4. 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 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() kannst du die Datei 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. Zum Schutz vor Speicherproblemen 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!");
    }
});

Über einen Stream herunterladen

Wenn Sie die Datei mit einem Stream herunterladen, können Sie die Daten während des Ladens verarbeiten. So sind Sie beim Umgang mit Ihrem Download äußerst flexibel. Rufe GetStreamAsync() auf und übergebe deinen eigenen Streamprozessor als erstes Argument. Dieser Delegate wird in einem Hintergrund-Thread mit einem Stream aufgerufen, sodass Sie latenzintensive Vorgänge oder Berechnungen ausführen können, z. B. das Speichern des Inhalts auf dem Laufwerk.

// 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() übernimmt optionale Argumente nach dem Streamprozessor, mit dem Sie den Vorgang abbrechen oder über den Fortschritt benachrichtigt werden können.

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 behandeln

Fehler können beim Download aus verschiedenen Gründen auftreten, z. B. wenn die Datei nicht vorhanden ist oder der Nutzer keine Zugriffsberechtigung für die gewünschte Datei hat. 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.