Usar metadados de arquivo com o Cloud Storage para C++

Depois de fazer upload de um arquivo para a referência do Cloud Storage, você também pode obter e atualizar os metadados do arquivo, por exemplo, para atualizar o tipo de conteúdo. Os arquivos também podem armazenar pares chave/valor personalizados com metadados de arquivo adicionais.

Obtenha metadados de arquivo

Os metadados do arquivo contêm propriedades comuns, como name , size e content_type (geralmente chamadas de tipo MIME), além de algumas 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
Future future = 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

Você pode atualizar os metadados do arquivo a qualquer momento após a conclusão do upload do arquivo usando o método UpdateMetadata . Consulte a lista completa para obter mais informações sobre quais propriedades podem ser atualizadas. Somente as propriedades especificadas nos metadados são atualizadas, todas as outras permanecem inalteradas.

// 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
Future future = 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();
}

Você pode excluir propriedades de metadados graváveis ​​passando a string vazia:

// Create file metadata with property to delete
StorageMetadata new_metadata;
new_metadata.set_content_type("");

// Delete the metadata property
Future future = 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

Existem vários motivos pelos quais podem ocorrer erros na obtenção ou atualização de metadados, incluindo o arquivo não existente ou o usuário não ter permissão para acessar o arquivo desejado. Mais informações sobre erros podem ser encontradas na seção Tratar erros da documentação.

Metadados personalizados

Você pode especificar metadados personalizados como um std::map contendo propriedades std::string .

std::map* custom_metadata = metadata.custom_metadata();
custom_metadata->insert(std::make_pair("location", "Yosemite, CA, USA");
custom_metadata->insert(std::make_pair("activity", "Hiking");

Você pode armazenar dados específicos do aplicativo para cada arquivo em metadados personalizados, mas é altamente recomendável usar um banco de dados (como o Firebase Realtime Database ) para armazenar e sincronizar esse tipo de dados.

Propriedades de metadados de arquivo

Uma lista completa de propriedades de metadados em um arquivo está disponível abaixo:

Propriedade Tipo Gravável
bucket const caracter* NÃO
generation const caracter* NÃO
metageneration const caracter* NÃO
full_path const caracter* NÃO
name const caracter* NÃO
size int64_t NÃO
time_created int64_t NÃO
updated int64_t NÃO
cache_control const caracter* SIM
content_disposition const caracter* SIM
content_encoding const caracter* SIM
content_language const caracter* SIM
content_type const caracter* SIM
download_urls std::vetor<std::string> NÃO
custom_metadata std::map<std::string, std::string> SIM

Próximos passos

Carregar, baixar e atualizar arquivos é importante, mas poder removê-los também. Vamos aprender como excluir arquivos do Cloud Storage.