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 hızlı ve kolay bir şekilde dosya indirmenize olanak tanır.

Referans Oluştur

Bir dosyayı indirmek için önce indirmek istediğiniz dosyaya bir Bulut Depolama referansı oluşturun .

Cloud Storage paketinizin kök dizinine alt yollar ekleyerek bir referans oluşturabilir veya Cloud Storage'daki bir nesneye başvuran 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

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

  1. Bellekteki bir tampona indir
  2. Cihazda belirli bir yola indirin
  3. Çevrimiçi dosyayı 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 çöker. Bellek sorunlarına karşı korunmak için, maksimum boyutu uygulamanızın kaldırabileceğ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);

Talep yapıldığı noktada ancak dosyayı okuyabilmek için Future'ın tamamlanmasını beklememiz gerekiyor. Oyunlar genellikle bir döngüde çalıştığından ve diğer uygulamalara göre daha az geri arama odaklı olduğundan, genellikle tamamlama için 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 indir

GetFile() yöntemi, bir dosyayı doğrudan yerel bir aygıta indirir. Kullanıcılarınız çevrimdışıyken dosyaya 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 bağımsız değişkeni alır. Daha fazla bilgi için İndirmeleri Yönet'e bakın.

İndirme URL'si oluştur

Halihazırda URL'lere dayalı indirme altyapınız varsa veya yalnızca paylaşılacak bir URL istiyorsanız, bir Bulut Depolama 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, Controller üzerinde isteğe bağlı olarak GetBytes() veya GetFile() yöntemlerine geçirebileceğiniz 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

İndirmenin 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);
}

İşleme Hataları

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 oluşmasının çeşitli nedenleri vardır. Hatalar hakkında daha fazla bilgi, belgelerin Hataları İşle bölümünde bulunabilir.

Sonraki adımlar

Ayrıca Cloud Storage'da depolanan dosyalar için meta verileri alabilir ve güncelleyebilirsiniz .