Depois de fazer upload de um arquivo para a referência do Cloud Storage, é possível receber e atualizar 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 usando o método getMetadata()
.
Kotlin+KTX
// Create a storage reference from our app val storageRef = storage.reference // Get reference to the file val forestRef = storageRef.child("images/forest.jpg")
forestRef.metadata.addOnSuccessListener { metadata -> // Metadata now contains the metadata for 'images/forest.jpg' }.addOnFailureListener { // Uh-oh, an error occurred! }
Java
// Create a storage reference from our app StorageReference storageRef = storage.getReference(); // Get reference to the file StorageReference forestRef = storageRef.child("images/forest.jpg");
forestRef.getMetadata().addOnSuccessListener(new OnSuccessListener<StorageMetadata>() { @Override public void onSuccess(StorageMetadata storageMetadata) { // Metadata now contains the metadata for 'images/forest.jpg' } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Uh-oh, an error occurred! } });
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.
Kotlin+KTX
// Create a storage reference from our app val storageRef = storage.reference // Get reference to the file val forestRef = storageRef.child("images/forest.jpg")
// Create file metadata including the content type val metadata = storageMetadata { contentType = "image/jpg" setCustomMetadata("myCustomProperty", "myValue") } // Update metadata properties forestRef.updateMetadata(metadata).addOnSuccessListener { updatedMetadata -> // Updated metadata is in updatedMetadata }.addOnFailureListener { // Uh-oh, an error occurred! }
Java
// Create a storage reference from our app StorageReference storageRef = storage.getReference(); // Get reference to the file StorageReference forestRef = storageRef.child("images/forest.jpg");
// Create file metadata including the content type StorageMetadata metadata = new StorageMetadata.Builder() .setContentType("image/jpg") .setCustomMetadata("myCustomProperty", "myValue") .build(); // Update metadata properties forestRef.updateMetadata(metadata) .addOnSuccessListener(new OnSuccessListener<StorageMetadata>() { @Override public void onSuccess(StorageMetadata storageMetadata) { // Updated metadata is in storageMetadata } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Uh-oh, an error occurred! } });
É possível excluir as propriedades de metadados graváveis transmitindo o valor null
:
Kotlin+KTX
// Create file metadata with property to delete val metadata = storageMetadata { contentType = null } // Delete the metadata property forestRef.updateMetadata(metadata).addOnSuccessListener { updatedMetadata -> // updatedMetadata.contentType should be null }.addOnFailureListener { // Uh-oh, an error occurred! }
Java
// Create file metadata with property to delete StorageMetadata metadata = new StorageMetadata.Builder() .setContentType(null) .build(); // Delete the metadata property forestRef.updateMetadata(metadata) .addOnSuccessListener(new OnSuccessListener<StorageMetadata>() { @Override public void onSuccess(StorageMetadata storageMetadata) { // metadata.contentType should be null } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Uh-oh, an error occurred! } });
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
Especifique metadados personalizados com o método setCustomMetadata()
na classe StorageMetadata.Builder
.
Kotlin+KTX
val metadata = storageMetadata { setCustomMetadata("location", "Yosemite, CA, USA") setCustomMetadata("activity", "Hiking") }
Java
StorageMetadata metadata = new StorageMetadata.Builder() .setCustomMetadata("location", "Yosemite, CA, USA") .setCustomMetadata("activity", "Hiking") .build();
É 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 das propriedades de metadados em um arquivo:
Getter da propriedade | Tipo | Existe um setter? |
---|---|---|
getBucket |
String |
NÃO |
getGeneration |
String |
NÃO |
getMetadataGeneration |
String |
NÃO |
getPath |
String |
NÃO |
getName |
String |
NÃO |
getSizeBytes |
long |
NÃO |
getCreationTimeMillis |
long |
NÃO |
getUpdatedTimeMillis |
long |
NÃO |
getMd5Hash |
String |
NÃO |
getCacheControl |
String |
SIM |
getContentDisposition |
String |
SIM |
getContentEncoding |
String |
SIM |
getContentLanguage |
String |
SIM |
getContentType |
String |
SIM |
getCustomMetadata |
String |
SIM |
getCustomMetadataKeys |
Set<String> |
NÃO |
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.