Cloud Storage for Firebase, Firebase tarafından sağlanan ve yönetilen bir Cloud Storage paketinden dosyaları hızlı ve kolay bir şekilde indirmenize olanak tanır.
Referans Oluşturma
Bir dosyayı indirmek için öncelikle indirmek istediğiniz dosyaya Cloud Storage referansı oluşturun.
Cloud Storage paketinizin köküne alt yol ekleyerek referans oluşturabilir veya Cloud Storage'teki bir nesneye referans veren mevcut bir gs://
ya da https://
URL'sinden referans oluşturabilirsiniz.
// Create a reference with an initial file path and name StorageReference path_reference = storage->GetReference("images/stars.jpg"); // Create a reference from a Cloud Storage URI StorageReference gs_reference = storage->GetReferenceFromUrl("gs://bucket/images/stars.jpg"); // Create a reference from an HTTPS URL // Note that in the URL, characters are URL escaped! StorageReference https_reference = storage->GetReferenceFromUrl("https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg");
Dosyaları İndir
Referans aldıktan sonra Cloud Storage platformundaki dosyaları üç şekilde indirebilirsiniz:
- Bellekteki bir arabelleğe indirme
- Cihazda belirli bir yola indirme
- Dosyayı online olarak temsil eden bir dize URL'si oluşturun
Hafızaya indirme
GetBytes()
yöntemini kullanarak dosyayı bellekteki bir bayt arabelleğine indirin. Bu, bir dosyayı hızlı bir şekilde indirmenin en kolay yoludur ancak dosyanızın içeriğinin tamamını belleğe yüklemesi gerekir. Uygulamanızın kullanılabilir belleğinden daha büyük bir dosya isterseniz uygulamanız kilitlenir. Bellek sorunlarına karşı koruma sağlamak için maksimum boyutu, uygulamanızın kaldırabileceğini bildiğiniz bir değere ayarlayın veya başka bir indirme yöntemi kullanın.
// Create a reference to the file you want to download StorageReference island_ref = storage_ref.Child("images/island.jpg"); // Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes) const size_t kMaxAllowedSize = 1 * 1024 * 1024 int8_t byte_buffer[kMaxAllowedSize]; firebase::Future<size_t> future = island_ref.GetBytes(byte_buffer, kMaxAllowedSize);
İstek gönderilmiş ancak dosyayı okuyabilmemiz için Future'ın tamamlanmasını beklememiz gerekiyor. Oyunlar genellikle döngü halinde çalıştığı ve diğer uygulamalara kıyasla geri çağırma işlevi daha az olduğu için genellikle tamamlanma için anket yaparsınız.
// In the game loop that polls for the result... if (future.status() != firebase::kFutureStatusPending) { if (future.status() != firebase::kFutureStatusComplete) { LogMessage("ERROR: GetBytes() returned an invalid future."); // Handle the error... } else if (future.Error() != firebase::storage::kErrorNone) { LogMessage("ERROR: GetBytes() returned error %d: %s", future.Error(), future.error_message()); // Handle the error... } else { // byte_buffer is now populated with data for "images/island.jpg" } }
Yerel bir dosyaya indirme
GetFile()
yöntemi, dosyayı doğrudan yerel bir cihaza indirir. Kullanıcılarınız çevrimdışıyken dosyaya erişmek veya dosyayı farklı bir uygulamada paylaşmak istiyorsa bunu kullanın.
// Create a reference to the file you want to download StorageReference islandRef = storage_ref.Child("images/island.jpg"]; // Create local filesystem URL const char* local_url = "file:///local/images/island.jpg"; // Download to the local filesystem Future<size_t> future = islandRef.GetFile(local_url); // Wait for Future to complete... if (future.Error() != firebase::storage::kErrorNone) { // Uh-oh, an error occurred! } else { // The file has been downloaded to local file URL "images/island.jpg" }
GetFile()
, indirme işleminizi yönetmek için kullanabileceğiniz isteğe bağlı bir Controller
bağımsız değişkeni alır. Daha fazla bilgi için İndirilenleri Yönetme bölümüne bakın.
İndirme URL'si oluşturma
URL'lere dayalı bir indirme altyapınız varsa veya paylaşmak için bir URL istiyorsanız Cloud Storage referansında GetDownloadUrl()
yöntemini çağırarak bir dosyanın indirme URL'sini alabilirsiniz.
// Create a reference to the file you want to download StorageReference stars_ref = storage_ref.Child("images/stars.jpg"); // Fetch the download URL firebase::Future<std::string> future = stars_ref.GetDownloadUrl(); // Wait for Future to complete... if (future.Error() != firebase::storage::kErrorNone) { // Uh-oh, an error occurred! } else { // Get the download URL for 'images/stars.jpg' std::string download_url = future.Result(); }
İndirilenleri yönetme
İndirme işlemlerini başlatmanın yanı sıra Controller
üzerinde Pause()
, Resume()
ve Cancel()
yöntemlerini kullanarak indirme işlemlerini duraklatabilir, devam ettirebilir ve iptal edebilirsiniz. Bu yöntemleri isteğe bağlı olarak GetBytes()
veya GetFile()
yöntemlerine iletebilirsiniz.
// Start downloading a file Controller controller; storage_ref.Child("images/mountains.jpg").GetFile(local_file, nullptr, &controller); // Pause the download controller.Pause(); // Resume the download controller.Resume(); // Cancel the download controller.Cancel();
İndirme işleminin ilerleme durumunu izleme
İndirme işleminin ilerleme durumunu izlemek için indirmelere dinleyici ekleyebilirsiniz.
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").GetFile(local_file, my_listener); }
Hataları işleme
İndirme sırasında hataların oluşmasının birçok nedeni vardır. Örneğin, dosyanın mevcut olmaması veya kullanıcının istenen dosyaya erişme izninin olmaması. Hatalar hakkında daha fazla bilgiyi belgelerin İşleyici Hataları bölümünde bulabilirsiniz.
Sonraki adımlar
Ayrıca, Cloud Storage'de depolanan dosyalar için meta verileri alıp güncelleyebilirsiniz.