Cloud Storage for Firebase ti consente di caricare rapidamente e facilmente i file in un bucket Cloud Storage fornito e gestito da Firebase.
Creazione di un riferimento
Per caricare un file, devi prima creare un riferimento Cloud Storage alla posizione in Cloud Storage in cui vuoi caricare il file.
Puoi creare un riferimento aggiungendo i percorsi secondari alla radice del bucket 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
Non puoi caricare dati con un riferimento alla radice del tuo bucket Cloud Storage. Il riferimento deve rimandare a un URL secondario.
Carica file
Una volta ottenuto un riferimento, puoi caricare i file su Cloud Storage in due modi:
- Caricare da un buffer di byte in memoria
- Caricare da un percorso del file che rappresenta un file sul dispositivo
Caricare i dati dalla memoria
Il metodo PutData()
è il modo più semplice per caricare un file su
Cloud Storage. PutData()
accetta un buffer di byte e restituisce un
Future<Metadata>
che conterrà informazioni sul file
al termine di Future. Puoi utilizzare un Controller
per gestire il caricamento e
monitorarne lo stato.
// 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);
Al momento della richiesta, ma dobbiamo attendere il completamento della futura prima del caricamento del file. Poiché i giochi vengono eseguiti in genere in un ciclo e sono meno basati su callback rispetto ad altre applicazioni, in genere esegui il polling per il completamento.
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(); } }
Caricare da un file locale
Puoi caricare file locali sui dispositivi, come foto e video dalla
fotocamera, con il metodo PutFile()
. PutFile()
accetta un std::string
che rappresenta il percorso del file e restituisce un
Future<Metadata>
che conterrà
informazioni sul file al termine di Future. Puoi utilizzare un
Controller
per gestire il caricamento e monitorarne lo stato.
// 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(); }
Se vuoi gestire attivamente il caricamento, puoi fornire un Controller
ai metodi
PutFile()
o PutBytes()
. In questo modo puoi utilizzare il controller per
osservare l'operazione di caricamento in corso. Per ulteriori informazioni, consulta Gestire i caricamenti.
Aggiungere metadati del file
Puoi anche includere i metadati quando carichi i file. Questi metadati contengono
le proprietà tipiche dei metadati dei file, come name
, size
e content_type
(comunemente denominati tipo MIME). Il metodo PutFile()
deduce automaticamente
il tipo di contenuti dall'estensione del nome file, ma puoi ignorare il tipo
rilevato automaticamente specificando content_type
nei metadati. Se non
fornisci un content_type
e Cloud Storage non può dedurre un valore predefinito dall'estensione del file, Cloud Storage utilizza application/octet-stream
. Per ulteriori informazioni sui metadati dei file, consulta la sezione Utilizzare i metadati dei file.
// 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);
Gestisci caricamenti
Oltre ad avviare i caricamenti, puoi metterli in pausa, riprenderli e annullarli utilizzando
i metodi Pause()
, Resume()
e Cancel()
su Controller
, che puoi
trasmettere facoltativamente ai metodi PutBytes()
o 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();
Monitorare l'avanzamento del caricamento
Puoi allegare listener ai caricamenti per monitorarne l'avanzamento.
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); }
Gestione degli errori
Esistono diversi motivi per cui potrebbero verificarsi errori durante il caricamento, tra cui l'assenza del file locale o la mancanza dell'autorizzazione per caricare il file desiderato. Puoi trovare ulteriori informazioni sugli errori nella sezione Gestire gli errori della documentazione.
Passaggi successivi
Ora che hai caricato i file, scopriamo come scaricarli da Cloud Storage.