Depois de fazer upload de um arquivo para a referência do Cloud Storage, também é possível acessar e atualizar os metadados do arquivo para, por exemplo, atualizar o tipo do conteúdo. Os arquivos também podem armazenar os pares de chave/valor personalizados com metadados adicionais.
Acessar metadados de arquivo
Os metadados de arquivos contêm propriedades comuns, como name
, size
e content_type
, que muitas vezes são chamadas de tipo MIME, além de outras menos comuns, como content_disposition
e time_created
. Esses metadados podem ser recuperados de uma referência do Cloud Storage usando o método GetMetadata
.
// Create reference to the file whose metadata we want to retrieve StorageReference forest_ref = storage_ref.Child("images/forest.jpg"); // Get metadata properties Futurefuture = forest_ref.GetMetadata(); // Wait for Future to complete... if (future.Error() != firebase::storage::kErrorNone) { // Uh-oh, an error occurred! } else { // We can now retrieve the metadata for 'images/forest.jpg' Metadata* metadata = future.Result(); }
Atualizar metadados de arquivo
Com o método UpdateMetadata
, é possível atualizar os metadados de arquivos
após a conclusão do upload. Consulte a
lista completa para saber mais sobre as propriedades
que podem ser atualizadas. Somente as propriedades especificadas nos metadados são atualizadas. As demais não são modificadas.
// Create reference to the file whose metadata we want to change firebase::storage::StorageReference forest_ref = storage_ref.child("images/forest.jpg"); // Create file metadata to update Metadata new_metadata; newMetadata.set_cache_control("public,max-age=300"); newMetadata.set_content_type("image/jpeg"); // Update metadata properties Futurefuture = forest_ref.UpdateMetadata(new_metadata); // Wait for Future to complete... if (future.Error() != firebase::storage::kErrorNone) { // Uh-oh, an error occurred! } else { // We can now retrieve the updated metadata for 'images/forest.jpg' Metadata* metadata = future.Result(); }
É possível excluir propriedades de metadados graváveis ao transferir a string vazia:
// Create file metadata with property to delete StorageMetadata new_metadata; new_metadata.set_content_type(""); // Delete the metadata property Futurefuture = forest_ref.UpdateMetadata(new_metadata); // Wait for Future to complete... if (future.Error() != 0) { // Uh-oh, an error occurred! } else { // metadata.content_type() should be an empty string Metadata* metadata = future.Result(); }
Lidar com erros
Podem ocorrer diferentes erros ao receber ou atualizar metadados, como arquivo inexistente ou usuário sem permissão de acesso ao arquivo desejado. Saiba mais sobre erros na seção Tratar erros.
Metadados personalizados
É possível especificar metadados personalizados como um std::map
contendo propriedades std::string
.
std::map<std::string, std::string>* custom_metadata = metadata.custom_metadata(); custom_metadata->insert(std::make_pair("location", "Yosemite, CA, USA"); custom_metadata->insert(std::make_pair("activity", "Hiking");
É possível armazenar os dados específicos de app de cada arquivo nos metadados personalizados, mas recomendamos o uso de um banco de dados como o Firebase Realtime Database para armazenar e sincronizar esse tipo de dados.
Propriedades de metadados de arquivos
Veja abaixo uma lista completa de propriedades de metadados em um arquivo:
Propriedade | Tipo | Gravável |
---|---|---|
bucket |
const char* | NÃO |
generation |
const char* | NÃO |
metageneration |
const char* | NÃO |
full_path |
const char* | NÃO |
name |
const char* | NÃO |
size |
int64_t | NÃO |
time_created |
int64_t | NÃO |
updated |
int64_t | NÃO |
cache_control |
const char* | SIM |
content_disposition |
const char* | SIM |
content_encoding |
const char* | SIM |
content_language |
const char* | SIM |
content_type |
const char* | SIM |
download_urls |
std::vector<std::string> | NÃO |
custom_metadata |
std::map<std::string, std::string> | SIM |
Próximas etapas
Fazer download, upload e atualizar arquivos são tarefas importantes, mas poder removê-los também é essencial. Vamos aprender como excluir arquivos do Cloud Storage.