Mengupload file dengan Cloud Storage untuk Unity

Dengan Cloud Storage for Firebase, Anda dapat mengupload file dengan cepat dan mudah ke bucket Cloud Storage yang disediakan dan dikelola oleh Firebase.

Membuat Referensi

Untuk mengupload file, buat referensi Cloud Storage terlebih dahulu ke file yang ingin Anda upload.

Anda dapat membuat referensi dengan menambahkan jalur turunan ke root bucket Cloud Storage, atau membuat referensi dari URL gs:// atau https:// yang sudah ada, yang mereferensikan suatu objek di 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);

Anda tidak bisa mengupload data dengan referensi ke root bucket Cloud Storage. Referensi Anda harus mengarah ke URL turunan.

Mengupload File

Setelah memiliki referensi, Anda bisa mengupload file ke Cloud Storage dengan dua cara:

  1. Mengupload dari array byte di memori
  2. Mengupload dari lokasi file yang mewakili file pada perangkat

Mengupload dari data di memori

Metode PutBytesAsync() adalah cara termudah untuk mengupload file ke Cloud Storage. PutBytesAsync() mengambil byte[] dan menampilkan System.Task<Firebase.Storage.StorageMetadata> yang akan berisi informasi tentang file setelah tugas selesai. Anda juga dapat menggunakan IProgress<UploadState> (biasanya StorageProgress<UploadState>) untuk memantau status upload.

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

Mengupload dari file lokal

Anda dapat mengupload file lokal pada perangkat, seperti foto dan video dari kamera, dengan metode PutFileAsync(). PutFileAsync() mengambil string yang mewakili jalur file dan menampilkan System.Task<Firebase.Storage.StorageMetadata> yang akan memuat informasi mengenai file tersebut saat tugas selesai. Anda juga dapat menggunakan IProgress<UploadState> (biasanya StorageProgress<UploadState>) untuk memantau status upload.

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

Jika ingin memantau upload secara aktif, Anda dapat menggunakan class StorageProgress atau class Anda sendiri yang menerapkan IProgress<UploadState>, dengan metode PutFileAsync() atau PutBytesAsync(). Baca bagian Mengelola Upload untuk mengetahui informasi lebih lanjut.

Menambahkan Metadata File

Anda juga dapat menyertakan metadata ketika mengupload file. Metadata ini berisi properti metadata file standar, seperti Name, Size, dan ContentType (umumnya dikenal sebagai jenis MIME). Metode PutFileAsync() secara otomatis menyimpulkan jenis konten dari ekstensi nama file, tetapi Anda dapat mengganti jenis konten yang terdeteksi secara otomatis dengan menentukan ContentType dalam metadata. Jika ContentType tidak ada dan Cloud Storage tidak dapat menyimpulkan default dari ekstensi file, Cloud Storage akan menggunakan application/octet-stream. Baca bagian Menggunakan Metadata File untuk mengetahui informasi lebih lanjut mengenai metadata file.

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

Memantau Kemajuan Upload

Anda dapat memasang pemroses ke upload untuk memantau progres upload. Pemroses mengikuti antarmuka System.IProgress<T> standar. Anda dapat menggunakan instance class StorageProgress untuk menyediakan Action<T> Anda sendiri sebagai callback untuk memantau progres.

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

Penanganan Error

Ada sejumlah penyebab terjadinya error saat upload, termasuk tidak adanya file lokal, atau pengguna tidak memiliki izin untuk mengupload file yang diinginkan. Anda dapat menemukan informasi lebih lanjut tentang error di bagian Menangani Error pada dokumentasi.

Langkah Berikutnya

Setelah mengupload file, pelajari cara mendownloadnya dari Cloud Storage.