Dateien mit Cloud Storage for Unity hochladen

Mit Cloud Storage for Firebase können Sie schnell und einfach Dateien auf ein Bucket Cloud Storage angegeben und wird von Firebase verwaltet.

Referenz erstellen

Um eine Datei hochzuladen, Cloud Storage-Referenz erstellen in die Datei ein, die Sie hochladen möchten.

Sie können eine Referenz erstellen, indem Sie untergeordnete Pfade an das Stammverzeichnis Ihres Cloud Storage Bucket, oder Sie erstellen eine Referenz aus einem vorhandenen Bucket gs://- oder https://-URL, 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 einer Referenz auf die Wurzel Ihres Cloud Storage-Buckets hochladen. Ihr Verweis muss auf eine untergeordnete URL verweisen.

Dateien hochladen

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

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

Aus Daten im Arbeitsspeicher hochladen

Die PutBytesAsync()-Methode ist die einfachste Möglichkeit, eine Datei in Cloud Storage hochzuladen. PutBytesAsync() nimmt ein byte[] entgegen und gibt eine System.Task<Firebase.Storage.StorageMetadata> zurück, die Informationen zur Datei enthält, wenn die Aufgabe abgeschlossen ist. Sie können optional IProgress<UploadState> (normalerweise StorageProgress<UploadState>) verwenden, um den Upload-Status ü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 wie Fotos und Videos von der Kamera auf die Geräte hochladen. PutFileAsync() macht string der den Pfad zur Datei darstellt, und gibt einen System.Task<Firebase.Storage.StorageMetadata> mit Informationen zur Datei, wenn die Aufgabe abgeschlossen ist. Sie können optional IProgress<UploadState> (normalerweise StorageProgress<UploadState>) verwenden, um den Upload-Status ü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 du deinen Upload aktiv beobachten möchtest, kannst du einen StorageProgress verwenden. oder Ihre eigene Klasse, die IProgress<UploadState> implementiert, mit dem PutFileAsync()- oder PutBytesAsync()-Methode. Weitere Informationen finden Sie unter Uploads verwalten.

Dateimetadaten hinzufügen

Sie können auch Metadaten beim Hochladen von Dateien angeben. Diese Metadaten enthalten Typische Dateimetadatenattribute wie Name, Size und ContentType (häufig als MIME-Typ bezeichnet). Bei der Methode PutFileAsync() wird der Inhaltstyp automatisch anhand der Dateinamenerweiterung abgeleitet. 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 Dateiendung ableiten kann, verwendet Cloud Storage application/octet-stream. Weitere Informationen finden Sie unter den Abschnitt Dateimetadaten verwenden finden Sie weitere Informationen zu Dateimetadaten.

// 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(...

Upload-Fortschritt überwachen

Sie können Listener an Uploads anhängen, um den Fortschritt des Uploads 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.

// 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 kann verschiedene Gründe für Fehler beim Upload geben, z. B. dass die lokale Datei nicht vorhanden ist oder der Nutzer keine Berechtigung zum Hochladen der gewünschten Datei hat. Weitere Informationen zu Fehlern finden Sie in der Fehler beheben der Dokumentation.

Nächste Schritte

Nachdem Sie Dateien hochgeladen haben, erfahren Sie nun, wie Sie sie von Cloud Storage herunterladen.