Mit Cloud Storage for Firebase können Sie Dateien schnell und einfach in einen von Firebase bereitgestellten und verwalteten Cloud Storage-Bucket hochladen.
Referenz erstellen
Wenn Sie eine Datei hochladen möchten, müssen Sie zuerst eine Cloud Storage-Referenz für den Speicherort in Cloud Storage erstellen, an den Sie die Datei hochladen möchten.
Sie können einen Verweis 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 einem Verweis auf das Stammverzeichnis Ihres Cloud Storage-Buckets hochladen. Ihr Verweis muss auf eine untergeordnete URL verweisen.
Dateien hochladen
Sobald Sie eine Referenz haben, können Sie Dateien auf zwei Arten in Cloud Storage hochladen:
- Aus einem Byte-Puffer im Arbeitsspeicher hochladen
- Über einen Dateipfad hochladen, der eine Datei auf dem Gerät darstellt
Aus Daten im Arbeitsspeicher hochladen
Die Methode PutData()
ist die einfachste Möglichkeit, eine Datei in Cloud Storage hochzuladen. PutData()
akzeptiert einen Byte-Puffer und gibt ein Future<Metadata>
zurück, das Informationen zur Datei enthält, wenn das Future abgeschlossen ist. Sie können Controller
verwenden, um Ihren Upload zu verwalten und seinen Status zu ü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);
Die Anfrage wurde gestellt, aber wir müssen warten, bis die Future abgeschlossen ist, bevor die Datei hochgeladen wird. Da Spiele in der Regel in einer Schleife ausgeführt werden und weniger auf Rückrufen basieren als andere Anwendungen, wird der Abschluss in der Regel abgefragt.
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 die Geräte hochladen, z. B. Fotos und Videos von der Kamera. PutFile()
akzeptiert ein std::string
, das den Pfad zur Datei darstellt, und gibt ein Future<Metadata>
zurück, das Informationen zur Datei enthält, wenn die Future abgeschlossen ist. Sie können ein Controller
verwenden, um Ihren Upload zu verwalten und seinen Status zu ü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 den Upload aktiv verwalten möchten, können Sie eine Controller
für die Methoden PutFile()
oder PutBytes()
angeben. So können Sie den Controller verwenden, um den laufenden Uploadvorgang zu beobachten. Weitere Informationen finden Sie unter Uploads verwalten.
Dateimetadaten hinzufügen
Sie können auch Metadaten einfügen, wenn Sie Dateien hochladen. Diese Metadaten enthalten typische Dateimetadateneigenschaften 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 kein content_type
angeben und Cloud Storage keinen Standardwert aus der Dateiendung 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
Neben dem Starten von Uploads können Sie Uploads mit den Methoden Pause()
, Resume()
und Cancel()
für Controller
pausieren, fortsetzen und abbrechen. Controller
kann optional an die Methoden PutBytes()
oder PutFile()
übergeben werden.
// 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 im Blick behalten
Sie können Listener an Uploads 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 Hochladen Fehler auftreten können. Dazu gehören, 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 Fehlerbehebung der Dokumentation.
Nächste Schritte
Nachdem Sie Dateien hochgeladen haben, erfahren Sie nun, wie Sie sie aus Cloud Storage herunterladen.