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

Cloud Storage dla Firebase umożliwia szybkie i łatwe przesyłanie plików do Zasobnik Cloud Storage został udostępniony i zarządzane przez Firebase.

Tworzenie referencji

Aby przesłać plik, utwórz referencję Cloud Storage w pliku, który chcesz przesłać.

Odwołanie możesz utworzyć, dołączając ścieżki podrzędne do katalogu głównego Cloud Storage lub możesz utworzyć odwołanie z istniejącego Adres URL gs:// lub https:// odwołujący 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 poziomu głównego Zasobnik Cloud Storage. Odwołanie musi wskazywać podrzędny URL.

Prześlij pliki

Mając plik referencyjny, możesz przesłać pliki do Cloud Storage na dwa 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 plików do Cloud Storage. PutBytesAsync() zajmuje bajt[] i zwraca System.Task<Firebase.Storage.StorageMetadata>, który będzie zawierają informacje o pliku po zakończeniu zadania. Opcjonalnie możesz użyj 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

Z urządzeń możesz przesyłać lokalne pliki, takie jak zdjęcia i filmy z metodą PutFileAsync(). PutFileAsync() trwa string reprezentuje ścieżkę do pliku i zwraca System.Task<Firebase.Storage.StorageMetadata>, które będą zawierać informacje o pliku po zakończeniu zadania. Opcjonalnie możesz użyj 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ć StorageProgress lub własną klasę, która implementuje IProgress<UploadState>, z operatorem Metody 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. Te metadane zawierają typowe właściwości metadanych pliku, 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ć parametr automatycznie wykrytego typu, określając ContentType w metadanych. Jeśli nie chcesz podać ContentType, a Cloud Storage nie może wywnioskować wartości domyślnej z z rozszerzeniem pliku, Cloud Storage używa application/octet-stream. Zobacz dokument Use File Metadata (Użyj 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

Możesz dołączyć detektory do przesłanych plików, aby monitorować postęp przesyłania przesyłanie. Detektor przestrzega standardowej reguły System.IProgress<T> za pomocą prostego interfejsu online. Można również użyć instancji klasy StorageProgress, aby Twój własny Action<T> jako wywołanie zwrotne do informacji o postępach.

// 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ć podczas przesyłania z różnych powodów. Oto niektóre z nich: plik lokalny nie istnieje lub użytkownik nie ma uprawnień do przesyłania, odpowiedni plik. Więcej informacji o błędach znajdziesz w Obsługa błędów sekcji dokumentów.

Następne kroki

Teraz, gdy masz już przesłane pliki, pobierz je z Cloud Storage.