C++ için Cloud Storage ile dosya indirme

Cloud Storage for Firebase, içeriklerinizi hızlı ve kolay bir şekilde indirmenize olanak tanır bir Cloud Storage dosyasındaki dosyaları Firebase tarafından sağlanır ve yönetilir.

Referans Oluşturma

Bir dosyayı indirmek için önce Cloud Storage referansı oluşturun dosyasını seçin.

Cloud Storage paketine sahip olabilir veya mevcut bir paketten referans oluşturabilirsiniz Cloud Storage içindeki bir nesneye referans veren gs:// veya https:// URL'si.

// 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 edindikten sonra dosyaları Cloud Storage hizmetinden indirebilirsiniz üç yöntem vardır:

  1. Bellekteki bir arabelleğe indir
  2. Cihazda belirli bir yola indir
  3. Dosyayı çevrimiçi temsil eden bir dize URL'si oluşturma

Bellekte indir

GetBytes() yöntemini kullanarak dosyayı bellekteki bir bayt arabelleğine indirin. Bu en kolay yol bir dosyayı hızlıca indirmektir, ancak dosyanın tüm içeriği yüklemesi gerekir hafızaya alabilirsiniz. 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 işleyebildiğini bildiğiniz bir şeye ayarladığınızdan emin olun veya başka bir indirme yöntemi.

// 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);

İstekte bulunuldu, ancak Gelecekteki Reklamının tamamlamadan önce okumamız gerekir. Oyunlar genellikle bir döngü içinde olduğundan uygulamalara göre daha az geri arama odaklıdır. Bu tür uygulamalar teşekkür etmenin de önemli bir yoludur.

// 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 dosyaya indir

GetFile() yöntemi, dosyayı doğrudan yerel bir cihaza indirir. Bu seçeneği aşağıdaki durumlarda kullanın: Kullanıcılarınız çevrimdışıyken dosyaya erişmek veya bir ekleyebilirsiniz.

// 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(), isteğe bağlı bir Controller bağımsız değişkeni alır. kullanabileceğiniz araçlardır. İndirilenleri Yönetme başlıklı makaleye göz atın. konulu videomuzu izleyin.

İ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 indirme işlemlerini duraklatabilir, devam ettirebilir ve iptal edebilirsiniz şurada Pause(), Resume() ve Cancel() yöntemlerini kullanarak: Controller (bu belgeyi isteğe bağlı olarak GetBytes() veya GetFile() yöntemleri.

// 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 İzleme

İşlemin ilerlemesini izlemek için indirmelere dinleyiciler ekleyebilirsiniz. indirin.

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ı Giderme

İndirme sırasında hataların oluşmasının birkaç nedeni vardır: dosya mevcut değil veya kullanıcının istenen dosyaya erişim izni yok. Hatalarla ilgili daha fazla bilgiyi dokümanların Hataları ele alma bölümünde bulabilirsiniz.

Sonraki adımlar

Ayrıca meta verileri alıp güncelleyebilirsiniz Cloud Storage klasöründe depolanan dosyalar.