Cloud Storage for Firebase umożliwia szybkie i łatwe przesyłanie plików do zasobnika Cloud Storage udostępnionego i zarządzanego przez Firebase.
Tworzenie referencji
Aby przesłać plik, najpierw utwórz odwołanie Cloud Storage do lokalizacji w Cloud Storage, do której chcesz przesłać plik.
Możesz utworzyć odwołanie, 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 przesłać danych odwołujących się do katalogu głównego zasobnika Cloud Storage. Odwoływanie musi wskazywać adres URL podrzędny.
Prześlij pliki
Po uzyskaniu odwołania możesz przesyłać pliki do usługi Cloud Storage na 2 sposoby:
- Przesyłanie z bufora bajtów w pamięci
- Przesyłanie z ścieżki pliku na urządzeniu
Przesyłanie danych z pamięci
Metoda PutData()
jest najprostszym sposobem przesyłania plików do usługi Cloud Storage. PutData()
przyjmuje bufor bajtów i zwraca Future<Metadata>
, który zawiera informacje o pliku po zakończeniu działania Future. Za pomocą Controller
możesz zarządzać przesyłaniem i sprawdzać jego 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" Futurefuture = rivers_ref.PutBytes(byte_buffer, kByteBufferSize);
W tym momencie żądanie zostało już wysłane, ale musimy poczekać, aż Future zakończy działanie, zanim plik zostanie przesłany. Gry zwykle działają w pętli i są mniej wywoływane niż inne aplikacje, dlatego sondowanie jest zwykle przeprowadzane w celu ukończenia.
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
Metoda PutFile()
umożliwia przesyłanie plików lokalnych z urządzeń, np. zdjęć i filmów z aparatu. PutFile()
przyjmuje std::string
reprezentujący ścieżkę do pliku i zwraca Future<Metadata>
, który będzie zawierać informacje o pliku po zakończeniu działania funkcji Future. Za pomocą pliku Controller
możesz 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" 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łanymi danymi, możesz podać Controller
do metod PutFile()
lub PutBytes()
. Dzięki temu możesz używać kontrolera do obserwowania trwającej operacji przesyłania. Więcej informacji znajdziesz w sekcji Zarządzanie przesyłaniem.
Dodawanie metadanych pliku
Podczas przesyłania plików możesz też dołączyć metadane. Zawierają one typowe właściwości metadanych plików, takie jak name
, size
i content_type
(powszechnie nazywane typem MIME). Metoda PutFile()
automatycznie wywnioskuje typ treści na podstawie rozszerzenia nazwy pliku, ale możesz zastąpić automatycznie wykryty typ, podając content_type
w metadanych. Jeśli nie podasz wartości content_type
, a Cloud Storage nie będzie mogła wywnioskować domyślnej wartości na podstawie rozszerzenia pliku, Cloud Storage użyje wartości application/octet-stream
. Więcej informacji o metadanych plików znajdziesz w sekcji Używanie metadanych plików.
// 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 inicjowania przesyłania możesz wstrzymywać, wznawiać i anulować przesyłanie za pomocą metod Pause()
, Resume()
i Cancel()
w funkcji Controller
. Metody te 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();
Monitorowanie postępu przesyłania
Aby monitorować postęp przesyłania, możesz dołączyć do przesłanych detektorów.
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 podczas przesyłania mogą wystąpić z różnych powodów, na przykład dlatego, że plik lokalny nie istnieje lub użytkownik nie ma uprawnień do przesłania odpowiedniego pliku. Więcej informacji o błędach znajdziesz w sekcji Przetwarzanie błędów w dokumentacji.
Następne kroki
Ponieważ pliki zostały już przesłane, dowiedz się, jak je pobrać z Cloud Storage.