Usar metadados de arquivos com o Cloud Storage para Unity

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, SizeBytes e ContentType, que muitas vezes são chamadas de tipo MIME, além de outras menos comuns, como ContentDisposition e CreationTimeMillis. Esses metadados podem ser recuperados de uma referência do Cloud Storage usando o método GetMetadataAsync.

// Create reference to the file whose metadata we want to retrieve
StorageReference forestRef =
    storageRef.Child("images/forest.jpg");

// Get metadata properties
forestRef.GetMetadataAsync().ContinueWithOnMainThread(task => {
    if (!task.IsFaulted && !task.IsCanceled) {
        StorageMetadata meta = task.Result;
        // do stuff with meta
    }
});

Atualizar metadados de arquivo

É possível atualizar os metadados do arquivo a qualquer momento após a conclusão do upload, usando o método UpdateMetadataAsync, que usa um objeto MetadataChange. Veja 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
StorageReference forestRef = storageRef.Child("images/forest.jpg");

// Create file metadata to update
var newMetadata = new MetadataChange();
newMetadata.CacheControl = "public,max-age=300";
newMetadata.ContentType = "image/jpeg";

// Update metadata properties
forestRef.UpdateMetadataAsync(newMetadata).ContinueWithOnMainThread(task => {
    if (!task.IsFaulted && !task.IsCanceled) {
        // access the updated meta data
        StorageMetadata meta = task.Result;
    }
});

É possível excluir propriedades de metadados graváveis ao transferir a string vazia:

// Create file metadata to update
var newMetadata = new MetadataChange();
newMetadata.ContentType = "";

// Update metadata properties
forestRef.UpdateMetadataAsync(newMetadata).ContinueWithOnMainThread(task => {
    if (!task.IsFaulted && !task.IsCanceled) {
        StorageMetadata meta = task.Result;
        // meta.ContentType should be an empty string now
    }
});

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 Dictionary<string, string>.

var newMetadata = new MetadataChange {
    CustomMetadata = new Dictionary<string, string> {
        {"location", "Yosemite, CA, USA"},
        {"activity", "Hiking"}
    }
};

// UpdateMetadataAsync

É 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 Modificável no MetadataChange
Bucket string NÃO
Generation string NÃO
MetadataGeneration string NÃO
Path string NÃO
Name string NÃO
SizeBytes long NÃO
CreationTimeMillis long NÃO
UpdatedTimeMillis long NÃO
CacheControl string SIM
ContentDisposition string SIM
ContentEncoding string SIM
ContentLanguage string SIM
ContentType string SIM
DownloadUrl Uri NÃO
DownloadUrls IList<Uri> NÃO
CustomMetadataKeys IEnumerable<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.