C++ için Cloud Storage ile dosyaları indirin

Firebase için Cloud Storage, 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ştur

Bir dosyayı indirmek için öncelikle indirmek istediğiniz dosyaya yönelik bir Cloud Storage referansı oluşturun .

Cloud Storage paketinizin köküne alt yollar ekleyerek bir referans oluşturabilir veya Cloud Storage'daki bir nesneye referans veren mevcut bir gs:// veya https:// URL'sinden bir 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ı indir

Referansınız olduğunda Cloud Storage'dan dosyaları üç şekilde indirebilirsiniz:

  1. Bellekteki bir ara belleğe indirme
  2. Cihazdaki belirli bir yola indirme
  3. Dosyayı çevrimiçi temsil eden bir dize URL'si oluşturun

Belleğe indir

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 tüm içeriğini belleğe yüklemesi gerekir. Uygulamanızın kullanılabilir belleğinden daha büyük bir dosya talep ederseniz uygulamanız çökecektir. Bellek sorunlarına karşı koruma sağlamak için maksimum boyutu, uygulamanızın işleyebileceğini bildiğiniz bir boyuta ayarladığınızdan emin olun 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 future = island_ref.GetBytes(byte_buffer, kMaxAllowedSize);

Bu noktada istek yapıldı ancak dosyayı okuyabilmek için Geleceğin tamamlanmasını beklemek zorundayız. Oyunlar genellikle bir döngüde çalıştığından ve diğer uygulamalara göre daha az geri çağrıldığından, genellikle tamamlanmak üzere yoklama 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 indirin

GetFile() yöntemi, bir dosyayı doğrudan yerel bir aygıta indirir. Kullanıcılarınız dosyaya çevrimdışıyken erişmek veya 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 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 argümanı alır. Daha fazla bilgi için İndirmeleri Yönetme konusuna bakın.

Bir indirme URL'si oluşturun

Zaten URL'lere dayalı bir indirme altyapınız varsa veya yalnızca bir URL'nin paylaşılmasını istiyorsanız, bir 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 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();
}

İndirmeleri Yönet

İndirmeleri başlatmanın yanı sıra, isteğe bağlı olarak GetBytes() veya GetFile() yöntemlerine iletebileceğiniz Controller üzerindeki Pause() , Resume() ve Cancel() yöntemlerini kullanarak indirmeleri duraklatabilir, devam ettirebilir ve iptal edebilirsiniz.

// 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 İlerlemesini İzleyin

İndirme işleminin ilerlemesini izlemek için indirmelere dinleyiciler 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ı İşle

Dosyanın mevcut olmaması veya kullanıcının istenen dosyaya erişim iznine sahip olmaması da dahil olmak üzere indirme sırasında hataların ortaya çıkmasının çeşitli nedenleri vardır. Hatalarla ilgili daha fazla bilgiyi dokümanların Hataları İşleme bölümünde bulabilirsiniz.

Sonraki adımlar

Ayrıca Cloud Storage'da depolanan dosyalara ilişkin meta verileri alabilir ve güncelleyebilirsiniz .