Przesyłanie plików za pomocą Cloud Storage dla Unity

Cloud Storage dla Firebase umożliwia szybkie i łatwe przesyłanie plików do zasobnika Cloud Storage udostępnianego i zarządzanego przez Firebase.

Tworzenie referencji

Aby przesłać plik, najpierw utwórz odniesienie do Cloud Storage do pliku, który chcesz przesłać.

Możesz utworzyć odwołanie, dodając ścieżki podrzędne do katalogu głównego zasobnika Cloud Storage. Możesz też utworzyć odwołanie z istniejącego adresu URL gs:// lub https:// odwołującego się do obiektu w Cloud Storage.

// 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);

Nie możesz przesłać danych odwołujących się do katalogu głównego zasobnika Cloud Storage. Odwołanie musi wskazywać podrzędny URL.

Prześlij pliki

Po utworzeniu odniesienia możesz przesłać pliki do Cloud Storage na 2 sposoby:

  1. Prześlij z tablicy bajtów w pamięci
  2. Przesyłanie ze ścieżki pliku reprezentującej plik na urządzeniu

Prześlij z danych w pamięci

Metoda PutBytesAsync() to najprostszy sposób przesyłania pliku do Cloud Storage. PutBytesAsync() pobiera bajt[] i zwraca System.Task<Firebase.Storage.StorageMetadata>, który po zakończeniu zadania będzie zawierał informacje o pliku. Opcjonalnie możesz używać IProgress<UploadState> (zwykle StorageProgress<UploadState>), aby monitorować stan przesyłania.

// 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);
        }
    });

Prześlij z pliku lokalnego

Metoda PutFileAsync() umożliwia przesyłanie plików lokalnych z urządzeń, np. zdjęć i filmów z aparatu. PutFileAsync() wybiera ścieżkę string reprezentującą ścieżkę do pliku i zwraca System.Task<Firebase.Storage.StorageMetadata>, który po zakończeniu zadania będzie zawierał informacje o pliku. Opcjonalnie możesz używać IProgress<UploadState> (zwykle StorageProgress<UploadState>), aby monitorować stan przesyłania.

// 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);
        }
    });

Jeśli chcesz aktywnie monitorować przesyłanie, możesz użyć klasy StorageProgress lub własnej klasy implementującej IProgress<UploadState> z metodami PutFileAsync() lub PutBytesAsync(). Więcej informacji znajdziesz w artykule Zarządzanie przesyłaniem.

Dodaj metadane pliku

Możesz też dołączyć metadane podczas przesyłania plików. Zawierają one typowe właściwości metadanych plików, takie jak Name, Size i ContentType (powszechnie nazywane typem MIME). Metoda PutFileAsync() automatycznie określa typ treści na podstawie rozszerzenia nazwy pliku, ale możesz zastąpić ten wykryty automatycznie typ, podając w metadanych ContentType. Jeśli nie podasz ContentType, a Cloud Storage nie będzie w stanie ustalić wartości domyślnej na podstawie rozszerzenia pliku, Cloud Storage użyje application/octet-stream. Więcej informacji o metadanych pliku znajdziesz w sekcji Używanie metadanych pliku.

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

Monitorowanie postępu przesyłania

Aby monitorować postęp przesyłania, możesz dołączyć do przesłanych detektorów. Detektor używa standardowego interfejsu System.IProgress<T>. Możesz użyć instancji klasy StorageProgress, aby podać własny obiekt Action<T> jako wywołanie zwrotne dla wskaźników postępu.

// 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.");
    }
});

Obsługa błędów

Błędy mogą występować przy przesyłaniu z różnych powodów, np. gdy plik lokalny nie istnieje lub użytkownik nie ma uprawnień do przesłania żądanego pliku. Więcej informacji o błędach znajdziesz w dokumentacji w sekcji Obsługa błędów.

Następne kroki

Dowiedz się, jak pobrać je z Cloud Storage.