Prześlij pliki za pomocą Cloud Storage dla C++

Cloud Storage dla Firebase umożliwia szybkie i łatwe przesyłanie plików do Zasobnik Cloud Storage został udostępniony i zarządzane przez Firebase.

Tworzenie referencji

Aby przesłać plik, utwórz referencję Cloud Storage do lokalizacji w Cloud Storage, do której chcesz przesłać plik.

Odwołanie możesz utworzyć, dołączając ścieżki podrzędne do katalogu głównego Zasobnik Cloud Storage:

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

Nie możesz przesłać danych odwołujących się do poziomu głównego Zasobnik Cloud Storage. Odwołanie musi wskazywać podrzędny URL.

Prześlij pliki

Mając plik referencyjny, możesz przesłać pliki do Cloud Storage na dwa sposoby:

  1. Prześlij z bufora bajtów w pamięci
  2. Przesyłanie ze ścieżki pliku reprezentującej plik na urządzeniu

Prześlij z danych w pamięci

Metoda PutData() to najprostszy sposób przesyłania plików do Cloud Storage. PutData() pobiera bufor bajtów i zwraca błąd Future<Metadata>, która będzie zawierać informacje o pliku gdy skończą się przyszłość. Za pomocą Controller możesz zarządzać przesyłaniem monitorować jej stan.

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

Otrzymaliśmy już wprawdzie wniosek, ale musimy poczekać na przed przesłaniem pliku. Gry zwykle uruchamiają się w pętli. są mniej oparte na wywołaniach zwrotnych niż inne aplikacje, zwykle do końca.

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

Prześlij z pliku lokalnego

Z urządzeń możesz przesyłać lokalne pliki, takie jak zdjęcia i filmy z metodą PutFile(). PutFile() trwa std::string reprezentuje ścieżkę do pliku i zwraca Future<Metadata>, które będą zawierać informacje o pliku po zakończeniu okresu przyszłego. Za pomocą Controller, aby zarządzać przesyłaniem i monitorować jego stan.

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

Jeśli chcesz aktywnie zarządzać przesyłanymi plikami, możesz przekazać Controller do PutFile() lub PutBytes(). Dzięki temu możesz używać kontrolera do: obserwować trwającą operację przesyłania. Zapoznaj się z artykułem Zarządzanie przesyłaniem na temat: znajdziesz więcej informacji.

Dodaj metadane pliku

Możesz też dołączyć metadane podczas przesyłania plików. Te metadane zawierają typowe właściwości metadanych pliku, takie jak name, size i content_type (Powszechnie nazywane typem MIME). Metoda PutFile() automatycznie określa typ treści z rozszerzenia nazwy pliku, ale możesz zastąpić parametr automatycznie wykrytego typu, określając content_type w metadanych. Jeśli nie chcesz podać content_type, a Cloud Storage nie może wywnioskować wartości domyślnej z z rozszerzeniem pliku, Cloud Storage używa application/octet-stream. Zobacz dokument Use File Metadata (Użyj metadanych pliku) .

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

Zarządzaj przesyłaniem

Oprócz rozpoczynania przesyłania możesz wstrzymywać, wznawiać i anulować przesyłanie za pomocą: Pause(), Resume() i Cancel() w Controller, które możesz opcjonalnie przekazać do metody PutBytes() lub PutFile().

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

Monitorowanie postępu przesyłania

Możesz dołączyć detektory do przesłanych plików, aby monitorować postęp przesyłania przesyłanie.

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

Obsługa błędów

Błędy mogą występować podczas przesyłania z różnych powodów. Oto niektóre z nich: plik lokalny nie istnieje lub użytkownik nie ma uprawnień do przesyłania, odpowiedni plik. Więcej informacji o błędach znajdziesz w Obsługa błędów sekcji dokumentów.

Następne kroki

Teraz, gdy masz już przesłane pliki, pobierz je z Cloud Storage.