Buka konsol

Mengupload File dengan Cloud Storage untuk Unity

Cloud Storage memungkinkan developer untuk mengupload file dengan cepat dan mudah ke bucket Google 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 lokasi turunan ke root penyimpanan, atau membuat referensi dari URL gs:// atau https:// yang sudah ada, yang mereferensikan suatu objek di Cloud Storage.

// Create a root reference
Firebase.Storage.StorageReference storage_ref = storage.Reference();

// Create a reference to "mountains.jpg"
Firebase.Storage.StorageReference mountains_ref = storage_ref.Child("mountains.jpg");

// Create a reference to 'images/mountains.jpg'
Firebase.Storage.StorageReference mountain_images_ref =
  storage_ref.Child("images/mountains.jpg");

// While the file names are the same, the references point to different files
mountains_ref.Name == mountain_images_ref.Name; // true
mountains_ref.Path == mountain_images_ref.Path; // false

Anda tidak bisa mengupload data dengan referensi ke root bucket Google 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 memuat informasi mengenai file tersebut saat tugas selesai. Anda juga dapat menggunakan IProgress<UploadState> (biasanya StorageProgress<UploadState>) untuk memantau status upload.

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

// Create a reference to the file you want to upload
Firebase.Storage.StorageReference rivers_ref = storage_ref.Child("images/rivers.jpg");

// Upload the file to the path "images/rivers.jpg"
rivers_ref.PutBytesAsync(custom_bytes)
  .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.
        Firebase.Storage.StorageMetadata metadata = task.Result;
        string download_url = metadata.DownloadUrl.ToString();
        Debug.Log("Finished uploading...");
        Debug.Log("download url = " + download_url);
    }
});

Mengupload dari file lokal

Anda dapat mengupload file lokal pada perangkat, seperti foto dan video dari kamera, dengan metode PutFileAsync(). PutFileAsync() mengambil string yang menunjukkan lokasi ke 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 local_file = ...

// Create a reference to the file you want to upload
Firebase.Storage.StorageReference rivers_ref = storage_ref.Child("images/rivers.jpg");

// Upload the file to the path "images/rivers.jpg"
rivers_ref.PutFileAsync(local_file)
  .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.
      Firebase.Storage.StorageMetadata metadata = task.Result;
      string download_url = metadata.DownloadUrl.ToString();
      Debug.Log("Finished uploading...");
      Debug.Log("download url = " + download_url);
    }
  });

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 bisa 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 bisa mengganti jenis file yang terdeteksi otomatis dengan menetapkan ContentType pada metadata. Jika Anda tidak memberikan ContentType dan Cloud Storage tidak dapat menyimpulkan default dari ekstensi file, Cloud Storage akan menggunakan application/octet-stream. Lihat Menggunakan Metadata File untuk informasi lebih lanjut tentang metadata file.

// Create storage reference
Firebase.Storage.StorageReference mountains_ref = storage_ref.Child("images/mountains.jpg");

var custom_bytes = new byte[] { ... };

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

// Upload data and metadata
mountains_ref.PutBytesAsync(custom_bytes, new_metadata, null,
                            CancellationToken.None, null);  // .ContinueWith(...
// Upload file and metadata
mountains_ref.PutFileAsync(local_file, new_metadata, null,
                           CancellationToken.None, null);  // .ContinueWith(...

Memantau Kemajuan Upload

Anda dapat memasang listener ke upload untuk memantau kemajuan upload. Listener mengikuti antarmuka System.IProgress<T> standar. Anda dapat menggunakan instance class StorageProgress, untuk memberikan Action<T> Anda sendiri sebagai callback untuk memantau kemajuan.

// Start uploading a file
var task = storage_ref.Child("images/mountains.jpg")
    .PutFileAsync(local_file, null,
      new Firebase.Storage.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.ContinueWith(resultTask => {
    if (!resultTask.IsFaulted && !resultTask.IsCancelled) {
        Debug.Log("Upload finished.");
    }
});

Penanganan Error

Ada sejumlah alasan 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.