Usar metadados de arquivos com o Cloud Storage no Flutter

Depois de fazer o upload de um arquivo para a referência do Cloud Storage, receba e atualize os metadados desse arquivo para, por exemplo, ver ou atualizar o tipo de conteúdo. Os arquivos também podem armazenar pares de chave/valor personalizados com outros metadados de arquivos.

Acessar metadados de arquivo

Os metadados de arquivos contêm propriedades comuns, que muitas vezes são chamadas de tipo MIME, como name, size e contentType, além de outras menos comuns, como contentDisposition e timeCreated. Esses metadados podem ser recuperados de uma referência do Cloud Storage com o método getMetadata().

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

// Get metadata properties
final metadata = await forestRef.getMetadata();

// Metadata now contains the metadata for 'images/forest.jpg'

Atualizar metadados de arquivos

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
final forestRef = storageRef.child("images/forest.jpg");

// Create file metadata to update
final newMetadata = SettableMetadata(
  cacheControl: "public,max-age=300",
  contentType: "image/jpeg",
);

// Update metadata properties
final metadata = await forestRef.updateMetadata(newMetadata);

// Updated metadata for 'images/forest.jpg' is returned

É possível excluir as propriedades de metadados graváveis transmitindo o valor null:

// Delete the cacheControl property
final newMetadata = SettableMetadata(cacheControl: null);
final metadata = await forestRef.updateMetadata(newMetadata);

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 Solucionar erros.

Metadados personalizados

É possível especificar metadados personalizados usando o parâmetro customMetadata do construtor SettableMetadata:

// Create reference to the file whose metadata we want to change
final forestRef = storageRef.child("images/forest.jpg");

// Create file metadata to update
final newCustomMetadata = SettableMetadata(
  customMetadata: {
    "location": "Yosemite, CA, USA",
    "activity": "Hiking",
  },
);

// Update metadata properties
final metadata = await forestRef.updateMetadata(newCustomMetadata);

// Updated metadata for 'images/forest.jpg' is returned

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 Definível?
bucket String Não
generation String Não
metageneration String Não
metadataGeneration String Não
fullPath String Não
name String Não
size int Não
timeCreated DateTime Não
updated DateTime Não
md5Hash String Não
cacheControl String Sim
contentDisposition String Sim
contentEncoding String Sim
contentLanguage String Sim
contentType String Sim
customMetadata Map<String, String> Sim

Fazer download, upload e atualizar arquivos são tarefas importantes, mas poder removê-los também é essencial. Saiba como excluir arquivos do Cloud Storage.