Cloud Storage dla Firebase umożliwia szybkie i łatwe przesyłanie plików do zasobnika Cloud Storage udostępnianego i zarządzanego przez Firebase.
Utwórz odniesienie
Aby przesłać plik, najpierw utwórz odniesienie do Cloud Storage do lokalizacji w Cloud Storage, do której chcesz przesłać plik.
Możesz utworzyć odniesienie, dołączając ścieżki podrzędne do katalogu głównego zasobnika 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 przesyłać danych z odniesieniem do katalogu głównego zasobnika Cloud Storage. Twoje odwołanie musi wskazywać na podrzędny adres URL.
Prześlij pliki
Po uzyskaniu referencji możesz przesyłać pliki do Cloud Storage na dwa sposoby:
- Prześlij z bufora bajtów w pamięci
- Prześlij ze ścieżki pliku reprezentującej plik na urządzeniu
Prześlij z danych znajdujących się w pamięci
Metoda PutData()
to najprostszy sposób na przesłanie pliku do Cloud Storage. PutData()
pobiera bufor bajtowy i zwraca Future<Metadata>
, który będzie zawierał informacje o pliku po zakończeniu Future. Możesz użyć Controller
, aby zarządzać przesyłaniem i monitorować jego status.
// 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);
W tym momencie żądanie zostało złożone, ale musimy poczekać, aż plik Future się zakończy, zanim plik zostanie przesłany. Ponieważ gry zazwyczaj działają w pętli i w mniejszym stopniu wymagają wywołań zwrotnych niż inne aplikacje, zazwyczaj będziesz odpytywać o ukończenie.
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
Za pomocą metody PutFile()
możesz przesyłać pliki lokalne na urządzenia, takie jak zdjęcia i filmy z aparatu. PutFile()
pobiera std::string
reprezentujący ścieżkę do pliku i zwraca Future<Metadata>
, który będzie zawierał informacje o pliku po zakończeniu Future. Możesz użyć Controller
, aby zarządzać przesyłaniem i monitorować jego status.
// 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(); }
Jeśli chcesz aktywnie zarządzać przesyłaniem, możesz dostarczyć Controller
do metod PutFile()
lub PutBytes()
. Dzięki temu możesz używać kontrolera do obserwacji trwającej operacji przesyłania. Aby uzyskać więcej informacji, zobacz Zarządzanie przesyłaniem .
Dodaj metadane pliku
Przesyłając pliki, możesz także dołączyć metadane. Te metadane zawierają typowe właściwości metadanych pliku, takie jak name
, size
i content_type
(powszechnie określany jako typ MIME). Metoda PutFile()
automatycznie wnioskuje o typ zawartości na podstawie rozszerzenia nazwy pliku, ale można zastąpić typ wykryty automatycznie, określając content_type
w metadanych. Jeśli nie podasz content_type
i Cloud Storage nie będzie w stanie wywnioskować wartości domyślnej z rozszerzenia pliku, Cloud Storage użyje application/octet-stream
. Aby uzyskać więcej informacji na temat metadanych plików, zobacz sekcję 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ą metod Pause()
, Resume()
i Cancel()
na Controller
, które możesz opcjonalnie przekazać do metod 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();
Monitoruj postęp przesyłania
Możesz dołączyć słuchaczy do przesyłanych plików, aby monitorować postęp przesyłania.
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
Istnieje wiele powodów, dla których mogą wystąpić błędy podczas przesyłania, na przykład nieistniejący plik lokalny lub brak uprawnień użytkownika do przesłania żądanego pliku. Więcej informacji na temat błędów można znaleźć w sekcji Obsługiwanie błędów w dokumentacji.
Następne kroki
Po przesłaniu plików nauczmy się, jak je pobrać z Cloud Storage.