Dateien mit Cloud Storage für C++ herunterladen

Mit Cloud Storage for Firebase können Sie Dateien schnell und einfach aus einem Cloud Storage-Bucket herunterladen, der von Firebase bereitgestellt und verwaltet wird.

Referenz erstellen

Wenn Sie eine Datei herunterladen möchten, Cloud Storage-Referenz erstellen in der Datei, die Sie herunterladen möchten.

Sie können eine Referenz erstellen, indem Sie untergeordnete Pfade an das Stammverzeichnis Ihres Cloud Storage Bucket, oder Sie erstellen eine Referenz aus einem vorhandenen Bucket gs://- oder https://-URL, die auf ein Objekt in Cloud Storage verweist.

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

Dateien herunterladen

Sobald Sie eine Referenz haben, können Sie Dateien auf drei Arten von Cloud Storage herunterladen:

  1. In einen Zwischenspeicher im Arbeitsspeicher herunterladen
  2. In einen bestimmten Pfad auf dem Gerät herunterladen
  3. Eine String-URL generieren, die die Datei online darstellt

In Arbeitsspeicher herunterladen

Lade die Datei mit der Methode GetBytes() in einen Byte-Puffer im Arbeitsspeicher herunter. Dieses ist die einfachste Möglichkeit, eine Datei schnell herunterzuladen, es muss jedoch der gesamte Inhalt geladen werden Ihrer Datei in den Speicher. Wenn Sie eine Datei anfordern, die größer als die Arbeitsspeicher verfügbar ist, stürzt die App ab. Um Speicherprobleme zu vermeiden, Legen Sie die maximale Größe auf einen Wert fest, den Ihre App verarbeiten kann, oder verwenden Sie eine andere Downloadmethode verwenden.

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

Zu diesem Zeitpunkt wurde die Anfrage gestellt, aber wir müssen warten, bis das Future bevor wir die Datei lesen können. Da Spiele in der Regel in einer Schleife ausgeführt werden und weniger Callback-gesteuert sind als andere Anwendungen, wird in der Regel der Abschluss abgefragt.

// 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"
  }
}

In eine lokale Datei herunterladen

Mit der Methode GetFile() wird eine Datei direkt auf ein lokales Gerät heruntergeladen. Verwenden Sie diese Option, wenn möchten Ihre Nutzer offline auf die Datei zugreifen können oder um sie in einem für eine andere App.

// 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() verwendet ein optionales Controller-Argument, das mit denen Sie Ihren Download verwalten können. Weitere Informationen finden Sie unter Downloads verwalten. .

Download-URL generieren

Wenn Sie bereits eine Download-Infrastruktur basierend auf URLs haben oder eine URL freigegeben haben, können Sie die Download-URL für eine Datei abrufen, indem Sie die Methode GetDownloadUrl()-Methode für eine Cloud Storage-Referenz.

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

Downloads verwalten

Sie können Downloads nicht nur starten, sondern auch pausieren, fortsetzen und abbrechen. mit den Methoden Pause(), Resume() und Cancel() Controller, die Sie optional an den GetBytes()- oder GetFile()-Methode.

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

Downloadfortschritt im Blick behalten

Sie können Listener an Downloads anhängen, um den Fortschritt des herunterladen.

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

Fehler behandeln

Fehler können aus verschiedenen Gründen beim Download auftreten, Datei nicht vorhanden oder der Nutzer hat keine Zugriffsberechtigung für die gewünschte Datei. Weitere Informationen zu Fehlern finden Sie in der Fehler beheben der Dokumentation.

Nächste Schritte

Sie können auch Metadaten abrufen und aktualisieren. für Dateien, die in Cloud Storage gespeichert sind.