Cloud Storage for Firebase umożliwia szybkie i łatwe przesyłanie plików do Udostępniono zasobnik Cloud Storage i zarządzane przez Firebase.
Tworzenie referencji
Aby przesłać plik, utwórz referencję Cloud Storage w folderze Cloud Storage, do którego 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
Gdy masz już plik referencyjny, możesz przesłać pliki do usługi Cloud Storage na dwa sposoby:
- Prześlij z bufora bajtów w pamięci
- 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" Futurefuture = 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
Możesz przesyłać z urządzeń pliki lokalne, 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" 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 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
podaj content_type
, a Cloud Storage nie może wywnioskować wartości domyślnych na podstawie
rozszerzenie pliku, Cloud Storage korzysta z 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 od Cloud Storage.