Cloud Storage for Firebase memungkinkan Anda 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 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 dapat mengupload data dengan referensi ke root bucket Cloud Storage. Referensi Anda harus mengarah ke URL turunan.
Upload File
Setelah memiliki referensi, Anda dapat mengupload file ke Cloud Storage dengan dua cara:
- Mengupload dari array byte di memori
- 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 Anda tidak menyediakan ContentType
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 selengkapnya tentang 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 caramendownloadnya dari Cloud Storage.