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:
- In einen Zwischenspeicher im Arbeitsspeicher herunterladen
- In einen bestimmten Pfad auf dem Gerät herunterladen
- 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.