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 lokasi tempat Anda ingin mengupload file di Cloud Storage.
Anda dapat membuat referensi dengan menambahkan jalur turunan ke root bucket Cloud Storage:
// Create a root reference StorageReference storage_ref = storage->GetReference(); // Create a reference to "mountains.jpg" StorageReference mountains_ref = storage_ref.Child("mountains.jpg"); // Create a reference to 'images/mountains.jpg' 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.full_path() == mountain_images_ref.full_path(); // false
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:
- Mengupload dari buffering byte di memori
- Mengupload dari lokasi file yang mewakili file pada perangkat
Mengupload dari data di memori
Metode PutData()
adalah cara termudah untuk mengupload
file ke Cloud Storage. PutData()
mengambil buffering byte dan menampilkan
Future<Metadata>
yang akan memuat informasi mengenai file tersebut
saat Future selesai. Anda dapat menggunakan Controller
untuk mengelola upload
dan memantau statusnya.
// Data in memory const size_t kByteBufferSize = ... uint8_t byte_buffer[kByteBufferSize] = { ... }; // Create a reference to the file you want to upload StorageReference rivers_ref = storage_ref.Child("images/rivers.jpg"); // Upload the file to the path "images/rivers.jpg" Futurefuture = rivers_ref.PutBytes(byte_buffer, kByteBufferSize);
Pada saat itu, permintaan telah dibuat, tetapi harus menunggu Future selesai sebelum file diupload. Karena game biasanya dijalankan dalam loop, dan tidak begitu berbasis callback dibanding aplikasi lain, Anda biasanya akan menanyakan penyelesaian.
if (future.status() != firebase::kFutureStatusPending) { if (future.status() != firebase::kFutureStatusComplete) { LogMessage("ERROR: GetData() returned an invalid future."); // Handle the error... } else if (future.Error() != firebase::storage::kErrorNone) { LogMessage("ERROR: GetData() returned error %d: %s", future.Error(), future.error_message()); // Handle the error... } } else { // Metadata contains file metadata such as size, content-type, and download URL. Metadata* metadata = future.Result(); std::string download_url = metadata->download_url(); } }
Mengupload dari file lokal
Anda dapat mengupload file lokal pada perangkat, seperti foto dan video
dari kamera, dengan metode PutFile()
. PutFile()
mengambil std::string
yang mewakili jalur file dan menampilkan
Future<Metadata>
yang akan memuat
informasi mengenai file tersebut saat Future selesai. Anda dapat menggunakan Controller
untuk mengelola upload dan memantau statusnya.
// File located on disk std::string local_file = ... // Create a reference to the file you want to upload StorageReference rivers_ref = storage_ref.Child("images/rivers.jpg"); // Upload the file to the path "images/rivers.jpg" Futurefuture = rivers_ref.PutFile(localFile); // Wait for Future to complete... if (future.Error() != firebase::storage::kErrorNone) { // Uh-oh, an error occurred! } else { // Metadata contains file metadata such as size, content-type, and download URL. Metadata* metadata = future.Result(); std::string download_url = metadata->download_url(); }
Jika ingin mengelola upload secara aktif, Anda dapat menyediakan Controller
ke metode PutFile()
atau PutBytes()
. Hal ini memungkinkan Anda menggunakan pengontrol untuk mengamati operasi upload yang sedang berlangsung. 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 content_type
(umumnya dikenal sebagai jenis MIME). Metode PutFile()
secara otomatis menyimpulkan
jenis konten dari ekstensi nama file, tetapi Anda dapat mengganti
jenis konten yang dideteksi secara otomatis dengan menentukan content_type
dalam metadata. Jika
content_type
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 mountains_ref = storage_ref.Child("images/mountains.jpg"); // Create file metadata including the content type StorageMetadata metadata; metadata.set_content_type("image/jpeg"); // Upload data and metadata mountains_ref.PutBytes(data, metadata); // Upload file and metadata mountains_ref.PutFile(local_file, metadata);
Mengelola Upload
Selain memulai upload, Anda dapat menjeda, melanjutkan, dan membatalkan upload menggunakan metode Pause()
, Resume()
, dan Cancel()
di Controller
, yang dapat Anda teruskan secara opsional ke metode PutBytes()
atau PutFile()
.
// Start uploading a file firebase::storage::Controller controller; storage_ref.Child("images/mountains.jpg").PutFile(local_file, nullptr, &controller); // Pause the upload controller.Pause(); // Resume the upload controller.Resume(); // Cancel the upload controller.Cancel();
Memantau Progres Upload
Anda dapat memasang pemroses ke upload untuk memantau progres upload.
class MyListener : public firebase::storage::Listener { public: virtual void OnProgress(firebase::storage::Controller* controller) { // A progress event occurred } }; { // Start uploading a file MyEventListener my_listener; storage_ref.Child("images/mountains.jpg").PutFile(local_file, my_listener); }
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.