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 visualizar ou 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 contentType
(geralmente chamadas de tipo MIME), além de algumas 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
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.
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! } });
Você pode excluir propriedades de metadados graváveis passando 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
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 usando 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();
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:
Obturador de propriedades | Tipo | O setter existe |
---|---|---|
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 |
Carregar, baixar e atualizar arquivos é importante, mas poder removê-los também. Vamos aprender como excluir arquivos do Cloud Storage.