Laden Sie Dateien mit Cloud Storage für C++ herunter

Mit Cloud Storage für Firebase können Sie schnell und einfach Dateien aus einem von Firebase bereitgestellten und verwalteten Cloud Storage- Bucket herunterladen.

Erstellen Sie eine Referenz

Um eine Datei herunterzuladen, erstellen Sie zunächst einen Cloud Storage-Verweis auf die Datei, die Sie herunterladen möchten.

Sie können eine Referenz erstellen, indem Sie untergeordnete Pfade an das Stammverzeichnis Ihres Cloud Storage-Buckets anhängen, oder Sie können eine Referenz aus einer vorhandenen gs:// oder https:// URL erstellen, 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 aus dem Cloud-Speicher herunterladen:

  1. In einen Puffer im Speicher herunterladen
  2. Laden Sie es in einen bestimmten Pfad auf dem Gerät herunter
  3. Generieren Sie online eine Zeichenfolgen-URL, die die Datei darstellt

Im Speicher herunterladen

Laden Sie die Datei mit der Methode GetBytes() in einen Bytepuffer im Speicher herunter. Dies ist der einfachste Weg, eine Datei schnell herunterzuladen, es muss jedoch der gesamte Inhalt Ihrer Datei in den Speicher geladen werden. Wenn Sie eine Datei anfordern, die größer ist als der verfügbare Speicher Ihrer App, stürzt Ihre App ab. Stellen Sie zum Schutz vor Speicherproblemen sicher, dass Sie die maximale Größe auf einen Wert festlegen, von dem Sie wissen, dass Ihre App ihn verarbeiten kann, oder verwenden Sie eine andere Download-Methode.

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

An dem Punkt, an dem die Anfrage gestellt wurde, müssen wir warten, bis die Zukunft abgeschlossen ist, bevor wir die Datei lesen können. Da Spiele normalerweise in einer Schleife ausgeführt werden und weniger auf Rückrufe angewiesen sind als andere Anwendungen, fragen Sie in der Regel den Abschluss ab.

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

Die GetFile() Methode lädt eine Datei direkt auf ein lokales Gerät herunter. Verwenden Sie diese Option, wenn Ihre Benutzer offline auf die Datei zugreifen oder sie in einer anderen App teilen möchten.

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

Generieren Sie eine Download-URL

Wenn Sie bereits über eine auf URLs basierende Download-Infrastruktur verfügen oder einfach nur eine URL teilen möchten, können Sie die Download-URL für eine Datei abrufen, indem Sie die GetDownloadUrl() Methode in einer Cloud Storage-Referenz aufrufen.

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

Downloads verwalten

Zusätzlich zum Starten von Downloads können Sie Downloads mit den Methoden Pause() , Resume() und Cancel() auf Controller anhalten, fortsetzen und abbrechen, die Sie optional an die Methoden GetBytes() oder GetFile() übergeben können.

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

Überwachen Sie den Download-Fortschritt

Sie können Downloads Listener hinzufügen, um den Fortschritt des Downloads zu überwachen.

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

Behandeln Sie Fehler

Es gibt eine Reihe von Gründen, warum beim Herunterladen Fehler auftreten können, darunter, dass die Datei nicht vorhanden ist oder der Benutzer keine Berechtigung zum Zugriff auf die gewünschte Datei hat. Weitere Informationen zu Fehlern finden Sie im Abschnitt „Fehler behandeln“ der Dokumentation.

Nächste Schritte

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