Cloud Storage per Firebase ti consente di caricare i file in modo rapido e semplice in un bucket Cloud Storage fornito e gestito da Firebase.
Crea un riferimento
Per caricare un file, crea innanzitutto un riferimento Cloud Storage alla posizione in Cloud Storage in cui desideri caricare il file.
Puoi creare un riferimento aggiungendo percorsi secondari alla radice del tuo 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 tuo riferimento deve puntare a un URL secondario.
Caricare files
Una volta ottenuto un riferimento, puoi caricare i file su Cloud Storage in due modi:
- Carica da un buffer di byte in memoria
- Carica da un percorso file che rappresenta un file sul dispositivo
Carica dai dati in 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 del Future. Puoi utilizzare un Controller
per gestire il tuo 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);
A questo punto la richiesta è stata fatta ma dobbiamo attendere il completamento del Future prima che il file venga caricato. Poiché i giochi in genere vengono eseguiti in un ciclo e sono meno richiamati rispetto ad altre applicazioni, in genere eseguirai 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(); } }
Carica da un file locale
Puoi caricare file locali sui dispositivi, come foto e video dalla fotocamera, con il metodo PutFile()
. PutFile()
accetta uno std::string
che rappresenta il percorso del file e restituisce un Future<Metadata>
che conterrà informazioni sul file al termine del Future. Puoi utilizzare un Controller
per gestire il tuo 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 tuo caricamento, puoi fornire un Controller
ai metodi PutFile()
o PutBytes()
. Ciò consente di utilizzare il controller per osservare l'operazione di caricamento in corso. Vedere Gestire i caricamenti per ulteriori informazioni.
Aggiungi metadati file
Puoi anche includere i metadati quando carichi i file. Questi metadati contengono proprietà tipiche dei metadati di file come name
, size
e content_type
(comunemente indicato come tipo MIME). Il metodo PutFile()
deduce automaticamente il tipo di contenuto dall'estensione del nome file, ma è possibile eseguire l'override del tipo rilevato automaticamente specificando content_type
nei metadati. Se non fornisci un content_type
e Cloud Storage non può dedurre un'impostazione predefinita dall'estensione del file, Cloud Storage utilizza application/octet-stream
. Vedere la sezione Usa metadati file per ulteriori informazioni sui metadati 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 mettere in pausa, riprendere e annullare i caricamenti utilizzando i metodi Pause()
, Resume()
e Cancel()
su Controller
, che puoi facoltativamente passare 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();
Monitora l'avanzamento del caricamento
Puoi allegare ascoltatori ai caricamenti per monitorare l'avanzamento del caricamento.
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 possono verificarsi errori durante il caricamento, incluso il file locale non esistente o l'utente che non dispone dell'autorizzazione per caricare il file desiderato. Puoi trovare ulteriori informazioni sugli errori nella sezione Gestione degli errori dei documenti.
Prossimi passi
Ora che hai caricato i file, impariamo come scaricarli da Cloud Storage.