Laden Sie Dateien mit Cloud Storage für Unity hoch

Mit Cloud Storage für Firebase können Sie Dateien schnell und einfach in einen von Firebase bereitgestellten und verwalteten Cloud Storage- Bucket hochladen.

Erstellen Sie eine Referenz

Um eine Datei hochzuladen, erstellen Sie zunächst einen Cloud Storage-Verweis auf die Datei, die Sie hochladen 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 root reference
StorageReference storageRef = storage.RootReference;

// Create a reference to "mountains.jpg"
StorageReference mountainsRef = storageRef.Child("mountains.jpg");

// Create a reference to 'images/mountains.jpg'
StorageReference mountainImagesRef =
    storageRef.Child("images/mountains.jpg");

// While the file names are the same, the references point to different files
Assert.AreEqual(mountainsRef.Name, mountainImagesRef.Name);
Assert.AreNotEqual(mountainsRef.Path, mountainImagesRef.Path);

Sie können keine Daten mit einem Verweis auf das Stammverzeichnis Ihres Cloud Storage-Buckets hochladen. Ihre Referenz muss auf eine untergeordnete URL verweisen.

Daten hochladen

Sobald Sie eine Referenz haben, können Sie Dateien auf zwei Arten in den Cloud-Speicher hochladen:

  1. Hochladen aus einem Byte-Array im Speicher
  2. Hochladen von einem Dateipfad, der eine Datei auf dem Gerät darstellt

Hochladen von Daten im Speicher

Die PutBytesAsync() Methode ist die einfachste Möglichkeit, eine Datei in Cloud Storage hochzuladen. PutBytesAsync() nimmt ein Byte[] und gibt ein System.Task<Firebase.Storage.StorageMetadata> zurück, das Informationen über die Datei enthält, wenn die Aufgabe abgeschlossen ist. Sie können optional einen IProgress<UploadState> (normalerweise StorageProgress<UploadState> ) verwenden, um Ihren Upload-Status zu überwachen.

// Data in memory
var customBytes = new byte[] {
    /*...*/
};

// Create a reference to the file you want to upload
StorageReference riversRef = storageRef.Child("images/rivers.jpg");

// Upload the file to the path "images/rivers.jpg"
riversRef.PutBytesAsync(customBytes)
    .ContinueWith((Task<StorageMetadata> task) => {
        if (task.IsFaulted || task.IsCanceled) {
            Debug.Log(task.Exception.ToString());
            // Uh-oh, an error occurred!
        }
        else {
            // Metadata contains file metadata such as size, content-type, and md5hash.
            StorageMetadata metadata = task.Result;
            string md5Hash = metadata.Md5Hash;
            Debug.Log("Finished uploading...");
            Debug.Log("md5 hash = " + md5Hash);
        }
    });

Aus einer lokalen Datei hochladen

Mit der Methode PutFileAsync() können Sie lokale Dateien auf die Geräte hochladen, beispielsweise Fotos und Videos von der Kamera. PutFileAsync() nimmt eine string , die den Pfad zur Datei darstellt, und gibt ein System.Task<Firebase.Storage.StorageMetadata> zurück, das Informationen über die Datei enthält, wenn die Aufgabe abgeschlossen ist. Sie können optional einen IProgress<UploadState> (normalerweise StorageProgress<UploadState> ) verwenden, um Ihren Upload-Status zu überwachen.

// File located on disk
string localFile = "...";

// Create a reference to the file you want to upload
StorageReference riversRef = storageRef.Child("images/rivers.jpg");

// Upload the file to the path "images/rivers.jpg"
riversRef.PutFileAsync(localFile)
    .ContinueWith((Task<StorageMetadata> task) => {
        if (task.IsFaulted || task.IsCanceled) {
            Debug.Log(task.Exception.ToString());
            // Uh-oh, an error occurred!
        }
        else {
            // Metadata contains file metadata such as size, content-type, and download URL.
            StorageMetadata metadata = task.Result;
            string md5Hash = metadata.Md5Hash;
            Debug.Log("Finished uploading...");
            Debug.Log("md5 hash = " + md5Hash);
        }
    });

Wenn Sie Ihren Upload aktiv überwachen möchten, können Sie eine StorageProgress Klasse oder Ihre eigene Klasse verwenden, die IProgress<UploadState> mit den Methoden PutFileAsync() oder PutBytesAsync() implementiert. Weitere Informationen finden Sie unter Uploads verwalten .

Dateimetadaten hinzufügen

Sie können beim Hochladen von Dateien auch Metadaten einschließen. Diese Metadaten enthalten typische Dateimetadateneigenschaften wie Name , Size und ContentType (allgemein als MIME-Typ bezeichnet). Die PutFileAsync() -Methode leitet den Inhaltstyp automatisch aus der Dateinamenerweiterung ab, Sie können den automatisch erkannten Typ jedoch überschreiben, indem Sie ContentType in den Metadaten angeben. Wenn Sie keinen ContentType angeben und Cloud Storage keinen Standard aus der Dateierweiterung ableiten kann, verwendet Cloud Storage application/octet-stream . Weitere Informationen zu Dateimetadaten finden Sie im Abschnitt „Dateimetadaten verwenden“ .

// Create storage reference
StorageReference mountainsRef = storageRef.Child("images/mountains.jpg");

byte[] customBytes = new byte[] {
    /*...*/
};
string localFile = "...";

// Create file metadata including the content type
var newMetadata = new MetadataChange();
newMetadata.ContentType = "image/jpeg";

// Upload data and metadata
mountainsRef.PutBytesAsync(customBytes, newMetadata, null,
    CancellationToken.None); // .ContinueWithOnMainThread(...
// Upload file and metadata
mountainsRef.PutFileAsync(localFile, newMetadata, null,
    CancellationToken.None); // .ContinueWithOnMainThread(...

Überwachen Sie den Upload-Fortschritt

Sie können Uploads Listener hinzufügen, um den Fortschritt des Uploads 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 Fortschritts-Ticks bereitzustellen.

// Start uploading a file
var task = storageRef.Child("images/mountains.jpg")
    .PutFileAsync(localFile, null,
        new StorageProgress<UploadState>(state => {
            // called periodically during the upload
            Debug.Log(String.Format("Progress: {0} of {1} bytes transferred.",
                state.BytesTransferred, state.TotalByteCount));
        }), CancellationToken.None, null);

task.ContinueWithOnMainThread(resultTask => {
    if (!resultTask.IsFaulted && !resultTask.IsCanceled) {
        Debug.Log("Upload finished.");
    }
});

Fehlerbehandlung

Es gibt eine Reihe von Gründen, warum beim Hochladen Fehler auftreten können, darunter, dass die lokale Datei nicht vorhanden ist oder der Benutzer keine Berechtigung zum Hochladen der gewünschten Datei hat. Weitere Informationen zu Fehlern finden Sie im Abschnitt „Fehler behandeln“ der Dokumentation.

Nächste Schritte

Nachdem Sie die Dateien hochgeladen haben, erfahren Sie jetzt, wie Sie sie aus dem Cloud-Speicher herunterladen .