Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Dateien mit Cloud Storage für C++ hochladen

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Mit Cloud Storage for Firebase können Sie Dateien schnell und einfach in einen von Firebase bereitgestellten und verwalteten Cloud Storage- Bucket hochladen.

Erstellen Sie eine Referenz

Um eine Datei hochzuladen, erstellen Sie zunächst eine Cloud Storage-Referenz zu dem Speicherort in Cloud Storage, an den Sie die Datei hochladen möchten.

Sie können eine Referenz erstellen, indem Sie untergeordnete Pfade an das Stammverzeichnis 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. Ihre Referenz muss auf eine untergeordnete URL verweisen.

Daten hochladen

Sobald Sie eine Referenz haben, können Sie Dateien auf zwei Arten in Cloud Storage hochladen:

  1. Hochladen aus einem Byte-Puffer im Arbeitsspeicher
  2. Hochladen von einem Dateipfad, der eine Datei auf dem Gerät darstellt

Hochladen von Daten im Speicher

Die Methode PutData() ist die einfachste Möglichkeit, eine Datei in Cloud Storage hochzuladen. PutData() nimmt einen Byte-Puffer und gibt ein Future<Metadata> zurück, das Informationen über die Datei enthält, wenn das Future abgeschlossen ist. Sie können einen 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"
Future future = rivers_ref.PutBytes(byte_buffer, kByteBufferSize);

An dem Punkt, an dem die Anfrage gestellt wurde, müssen wir warten, bis Future abgeschlossen ist, bevor die Datei hochgeladen wird. Da Spiele normalerweise in einer Schleife ausgeführt werden und weniger Callback-gesteuert sind als andere Anwendungen, werden Sie normalerweise den Abschluss abfragen.

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 PutFile() Methode können Sie lokale Dateien auf den Geräten hochladen, z. B. Fotos und Videos von der Kamera. PutFile() nimmt einen std::string , der den Pfad zu der Datei darstellt, und gibt ein Future<Metadata> zurück, das Informationen über die Datei enthält, wenn das Future abgeschlossen ist. Sie können einen 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"
Future future = 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 zuweisen. Auf diese Weise können Sie mit dem Controller den laufenden Upload-Vorgang beobachten. Weitere Informationen finden Sie unter Uploads verwalten .

Dateimetadaten hinzufügen

Sie können beim Hochladen von Dateien auch Metadaten einbeziehen. Diese Metadaten enthalten typische Datei-Metadaten-Eigenschaften wie name , size und content_type (allgemein als MIME-Typ bezeichnet). Die PutFile() Methode leitet den Inhaltstyp automatisch aus der Dateinamenerweiterung ab, aber Sie können den automatisch erkannten Typ überschreiben, indem Sie content_type in den Metadaten angeben. Wenn Sie keinen content_type und Cloud Storage aus der Dateierweiterung keinen Standardwert 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

Zusätzlich zum Starten von Uploads können Sie Uploads mit den Methoden Pause() , Resume() und Cancel() auf Controller anhalten, fortsetzen und abbrechen, die Sie optional an die PutBytes() oder PutFile() 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();

Überwachen Sie den Upload-Fortschritt

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 Hochladen Fehler auftreten können, darunter die lokale Datei, die nicht vorhanden ist, oder der Benutzer, der keine Berechtigung zum Hochladen der gewünschten Datei hat. Weitere Informationen zu Fehlern finden Sie im Abschnitt Fehlerbehandlung der Dokumentation.

Nächste Schritte

Nachdem Sie Dateien hochgeladen haben, erfahren Sie, wie Sie sie aus Cloud Storage herunterladen .