Cloud Storage for Firebase können Sie schnell und einfach Dateien in einen Cloud Storage-Bucket hochladen, der von Firebase bereitgestellt und verwaltet wird.
Referenz erstellen
Um eine Datei hochzuladen, erstellen Sie zuerst eine Cloud Storage Referenz zum Speicherort in Cloud Storage, an den Sie die Datei hochladen möchten.
Sie können eine Referenz erstellen, indem Sie untergeordnete Pfade an den Stamm Ihres Cloud Storage Buckets anhängen:
// Create a root reference StorageReference storage_ref = storage->GetReference(); // Create a reference to "mountains.jpg" StorageReference mountains_ref = storage_ref.Child("mountains.jpg"); // Create a reference to 'images/mountains.jpg' StorageReference mountain_images_ref = storage_ref.Child("images/mountains.jpg"); // While the file names are the same, the references point to different files mountains_ref.name() == mountain_images_ref.name(); // true mountains_ref.full_path() == mountain_images_ref.full_path(); // false
Sie können keine Daten mit einer Referenz zum Stamm Ihres Cloud Storage Buckets hochladen. Ihre Referenz muss auf eine untergeordnete URL verweisen.
Dateien hochladen
Sobald Sie eine Referenz haben, können Sie Dateien auf Cloud Storage zwei Arten hochladen:
- Aus einem Bytepuffer im Arbeitsspeicher hochladen
- Über einen Dateipfad, der eine Datei auf dem Gerät darstellt, hochladen
Aus Daten im Arbeitsspeicher hochladen
Die Methode PutData() ist die einfachste Möglichkeit, eine Datei in
Cloud Storage hochzuladen. PutData() verwendet einen Bytepuffer und gibt ein
Future<Metadata> zurück, das Informationen zur Datei enthält
wenn das Future abgeschlossen ist. Mit einem Controller können Sie Ihren Upload verwalten und seinen Status überwachen.
// Data in memory const size_t kByteBufferSize = ... uint8_t byte_buffer[kByteBufferSize] = { ... }; // Create a reference to the file you want to upload StorageReference rivers_ref = storage_ref.Child("images/rivers.jpg"); // Upload the file to the path "images/rivers.jpg" Futurefuture = rivers_ref.PutBytes(byte_buffer, kByteBufferSize);
An diesem Punkt wurde die Anfrage gestellt, aber wir müssen warten, bis das Future abgeschlossen ist, bevor die Datei hochgeladen wird. Da Spiele in der Regel in einer Schleife ausgeführt werden und weniger auf Callbacks basieren als andere Anwendungen, fragen Sie in der Regel den Abschluss ab.
if (future.status() != firebase::kFutureStatusPending) { if (future.status() != firebase::kFutureStatusComplete) { LogMessage("ERROR: GetData() returned an invalid future."); // Handle the error... } else if (future.Error() != firebase::storage::kErrorNone) { LogMessage("ERROR: GetData() returned error %d: %s", future.Error(), future.error_message()); // Handle the error... } } else { // Metadata contains file metadata such as size, content-type, and download URL. Metadata* metadata = future.Result(); std::string download_url = metadata->download_url(); } }
Aus einer lokalen Datei hochladen
Mit der Methode PutFile() können Sie lokale Dateien auf den Geräten hochladen, z. B. Fotos und Videos von der Kamera. PutFile() verwendet ein std::string
, das den Pfad zur Datei darstellt, und gibt ein
Future<Metadata> zurück, das
Informationen zur Datei enthält, wenn das Future abgeschlossen ist. Mit einem Controller können Sie Ihren Upload verwalten und seinen Status überwachen.
// File located on disk std::string local_file = ... // Create a reference to the file you want to upload StorageReference rivers_ref = storage_ref.Child("images/rivers.jpg"); // Upload the file to the path "images/rivers.jpg" Futurefuture = rivers_ref.PutFile(localFile); // Wait for Future to complete... if (future.Error() != firebase::storage::kErrorNone) { // Uh-oh, an error occurred! } else { // Metadata contains file metadata such as size, content-type, and download URL. Metadata* metadata = future.Result(); std::string download_url = metadata->download_url(); }
Wenn Sie Ihren Upload aktiv verwalten möchten, können Sie den Methoden PutFile() oder PutBytes() einen Controller übergeben. So können Sie den laufenden Uploadvorgang beobachten. Weitere Informationen finden Sie unter Uploads verwalten.
Dateimetadaten hinzufügen
Sie können beim Hochladen von Dateien auch Metadaten einfügen. Diese Metadaten enthalten typische Dateimetadaten-Attribute wie name, size und content_type (allgemein als MIME-Typ bezeichnet). Die Methode PutFile() leitet den Inhaltstyp automatisch aus der Dateinamenerweiterung ab. Sie können den automatisch erkannten Typ jedoch überschreiben, indem Sie content_type in den Metadaten angeben. Wenn Sie keinen content_type angeben und Cloud Storage keinen Standardwert aus der Dateierweiterung ableiten kann, verwendet Cloud Storage application/octet-stream. Weitere Informationen zu Dateimetadaten finden Sie im Abschnitt
Dateimetadaten verwenden.
// Create storage reference StorageReference mountains_ref = storage_ref.Child("images/mountains.jpg"); // Create file metadata including the content type StorageMetadata metadata; metadata.set_content_type("image/jpeg"); // Upload data and metadata mountains_ref.PutBytes(data, metadata); // Upload file and metadata mountains_ref.PutFile(local_file, metadata);
Uploads verwalten
Sie können Uploads nicht nur starten, sondern auch pausieren, fortsetzen und abbrechen. Verwenden Sie dazu die Methoden Pause(), Resume() und Cancel() für Controller, die Sie optional an die Methoden PutBytes() oder PutFile() übergeben können.
// Start uploading a file firebase::storage::Controller controller; storage_ref.Child("images/mountains.jpg").PutFile(local_file, nullptr, &controller); // Pause the upload controller.Pause(); // Resume the upload controller.Resume(); // Cancel the upload controller.Cancel();
Uploadfortschritt überwachen
Sie können Uploads Listener anhängen, um den Fortschritt des Uploads 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").PutFile(local_file, my_listener); }
Fehlerbehandlung
Es gibt eine Reihe von Gründen, warum beim Upload Fehler auftreten können. Dazu gehören beispielsweise, dass die lokale Datei nicht vorhanden ist oder der Nutzer keine Berechtigung zum Hochladen der gewünschten Datei hat. Weitere Informationen zu Fehlern finden Sie im Abschnitt Fehler behandeln in der Dokumentation.
Nächste Schritte
Nachdem Sie nun Dateien hochgeladen haben, erfahren Sie, wie Sie sie herunterladen aus Cloud Storage.