Usar metadados de arquivos com o Cloud Storage para Unity

Depois de fazer o 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 a partir de uma referência do Cloud Storage com 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
    }
});

Como 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

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

Propriedades de metadados de arquivo

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. Saiba como excluir arquivos do Cloud Storage.