Usa metadatos de archivos con Cloud Storage en Android
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Después de subir un archivo a la referencia de Cloud Storage, también puedes obtener y actualizar los metadatos del archivo; por ejemplo, para ver o actualizar el tipo de contenido.
Los archivos también pueden almacenar pares clave-valor personalizados con metadatos de archivo adicionales.
Obtén metadatos de archivos
Los metadatos de archivos contienen propiedades comunes, como name, size y
contentType (a menudo, denominado tipo de MIME), además de otros menos
comunes, como contentDisposition y timeCreated. Estos metadatos se pueden recuperar de una referencia de Cloud Storage con el método getMetadata()
Kotlin
// Create a storage reference from our appvalstorageRef=storage.reference// Get reference to the filevalforestRef=storageRef.child("images/forest.jpg")
forestRef.metadata.addOnSuccessListener{metadata->
// Metadata now contains the metadata for 'images/forest.jpg'}.addOnFailureListener{// Uh-oh, an error occurred!}
// Create a storage reference from our appStorageReferencestorageRef=storage.getReference();// Get reference to the fileStorageReferenceforestRef=storageRef.child("images/forest.jpg");
forestRef.getMetadata().addOnSuccessListener(newOnSuccessListener<StorageMetadata>(){@OverridepublicvoidonSuccess(StorageMetadatastorageMetadata){// Metadata now contains the metadata for 'images/forest.jpg'}}).addOnFailureListener(newOnFailureListener(){@OverridepublicvoidonFailure(@NonNullExceptionexception){// Uh-oh, an error occurred!}});
Para actualizar los metadatos de un archivo en cualquier momento después de haberlo subido, puedes usar el método updateMetadata(). Consulta la lista completa para obtener más información sobre qué propiedades se pueden actualizar. Solo se actualizan las propiedades especificadas en los metadatos; todas las demás quedan sin cambios.
Kotlin
// Create a storage reference from our appvalstorageRef=storage.reference// Get reference to the filevalforestRef=storageRef.child("images/forest.jpg")
// Create file metadata including the content typevalmetadata=storageMetadata{contentType="image/jpg"setCustomMetadata("myCustomProperty","myValue")}// Update metadata propertiesforestRef.updateMetadata(metadata).addOnSuccessListener{updatedMetadata->
// Updated metadata is in updatedMetadata}.addOnFailureListener{// Uh-oh, an error occurred!}
// Create a storage reference from our appStorageReferencestorageRef=storage.getReference();// Get reference to the fileStorageReferenceforestRef=storageRef.child("images/forest.jpg");
// Create file metadata including the content typeStorageMetadatametadata=newStorageMetadata.Builder().setContentType("image/jpg").setCustomMetadata("myCustomProperty","myValue").build();// Update metadata propertiesforestRef.updateMetadata(metadata).addOnSuccessListener(newOnSuccessListener<StorageMetadata>(){@OverridepublicvoidonSuccess(StorageMetadatastorageMetadata){// Updated metadata is in storageMetadata}}).addOnFailureListener(newOnFailureListener(){@OverridepublicvoidonFailure(@NonNullExceptionexception){// Uh-oh, an error occurred!}});
Para borrar propiedades de los metadatos que admiten escritura, puedes pasar null:
Kotlin
// Create file metadata with property to deletevalmetadata=storageMetadata{contentType=null}// Delete the metadata propertyforestRef.updateMetadata(metadata).addOnSuccessListener{updatedMetadata->
// updatedMetadata.contentType should be null}.addOnFailureListener{// Uh-oh, an error occurred!}
// Create file metadata with property to deleteStorageMetadatametadata=newStorageMetadata.Builder().setContentType(null).build();// Delete the metadata propertyforestRef.updateMetadata(metadata).addOnSuccessListener(newOnSuccessListener<StorageMetadata>(){@OverridepublicvoidonSuccess(StorageMetadatastorageMetadata){// metadata.contentType should be null}}).addOnFailureListener(newOnFailureListener(){@OverridepublicvoidonFailure(@NonNullExceptionexception){// Uh-oh, an error occurred!}});
Existen diferentes motivos por los que pueden producirse errores cuando se quieren obtener o actualizar metadatos. Por ejemplo, es posible que el archivo no exista o que el usuario no tenga permiso para acceder al archivo deseado. Para obtener más información sobre los errores, consulta la
sección de los documentos denominada
Soluciona errores.
Metadatos personalizados
Puedes especificar metadatos personalizados con el método setCustomMetadata() de la clase StorageMetadata.Builder.
Kotlin
valmetadata=storageMetadata{setCustomMetadata("location","Yosemite, CA, USA")setCustomMetadata("activity","Hiking")}
Puedes almacenar datos específicos de tu app para cada archivo en forma de metadatos personalizados, pero te recomendamos que uses una base de datos (como Firebase Realtime Database) para almacenar y sincronizar este tipo de datos.
Propiedades de los metadatos de archivos
A continuación, puedes ver una lista completa de las propiedades de metadatos de un archivo:
Método get de la propiedad
Tipo
Existe método set
getBucket
String
NO
getGeneration
String
NO
getMetadataGeneration
String
NO
getPath
String
NO
getName
String
NO
getSizeBytes
long
NO
getCreationTimeMillis
long
NO
getUpdatedTimeMillis
long
NO
getMd5Hash
String
NO
getCacheControl
String
SÍ
getContentDisposition
String
SÍ
getContentEncoding
String
SÍ
getContentLanguage
String
SÍ
getContentType
String
SÍ
getCustomMetadata
String
SÍ
getCustomMetadataKeys
Set<String>
NO
Es importante subir, descargar y actualizar archivos, pero también lo es poder quitarlos. Veamos cómo borrar archivos
desde Cloud Storage.
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-04 (UTC)"],[],[],null,["\u003cbr /\u003e\n\nAfter uploading a file to Cloud Storage reference, you can also get\nand update the file metadata, for example to view or update the content type.\nFiles can also store custom key/value pairs with additional file metadata.\n| **Note:** By default, a Cloud Storage for Firebase bucket requires Firebase Authentication to perform any action on the bucket's data or files. You can change your Firebase Security Rules for Cloud Storage to [allow unauthenticated access for specific situations](/docs/storage/security/rules-conditions#public). However, for most situations, we strongly recommend [restricting access and setting up robust security rules](/docs/storage/security/get-started) (especially for production apps). Note that if you use Google App Engine and have a default Cloud Storage bucket with a name format of `*.appspot.com`, you may need to consider [how your security rules impact access to App Engine files](/docs/storage/gcp-integration#security-rules-and-app-engine-files).\n\nGet File Metadata\n\nFile metadata contains common properties such as `name`, `size`, and\n`contentType` (often referred to as MIME type) in addition to some less\ncommon ones like `contentDisposition` and `timeCreated`. This metadata can be\nretrieved from a Cloud Storage reference using\nthe `getMetadata()` method. \n\nKotlin \n\n```kotlin\n// Create a storage reference from our app\nval storageRef = storage.reference\n\n// Get reference to the file\nval forestRef = storageRef.child(\"images/forest.jpg\")\n``` \n\n```kotlin\nforestRef.metadata.addOnSuccessListener { metadata -\u003e\n // Metadata now contains the metadata for 'images/forest.jpg'\n}.addOnFailureListener {\n // Uh-oh, an error occurred!\n}https://github.com/firebase/snippets-android/blob/b694d4dbd411d31be39655f47691c3e9f3529b03/storage/app/src/main/java/com/google/firebase/referencecode/storage/kotlin/StorageActivity.kt#L345-L349\n```\n\nJava \n\n```java\n// Create a storage reference from our app\nStorageReference storageRef = storage.getReference();\n\n// Get reference to the file\nStorageReference forestRef = storageRef.child(\"images/forest.jpg\");\n``` \n\n```java\nforestRef.getMetadata().addOnSuccessListener(new OnSuccessListener\u003cStorageMetadata\u003e() {\n @Override\n public void onSuccess(StorageMetadata storageMetadata) {\n // Metadata now contains the metadata for 'images/forest.jpg'\n }\n}).addOnFailureListener(new OnFailureListener() {\n @Override\n public void onFailure(@NonNull Exception exception) {\n // Uh-oh, an error occurred!\n }\n});https://github.com/firebase/snippets-android/blob/b694d4dbd411d31be39655f47691c3e9f3529b03/storage/app/src/main/java/com/google/firebase/referencecode/storage/StorageActivity.java#L437-L447\n```\n\nUpdate File Metadata\n\nYou can update file metadata at any time after the file upload completes by\nusing the `updateMetadata()` method. Refer to the\n[full list](#file-metadata-properties) for more information on what properties\ncan be updated. Only the properties specified in the metadata are updated,\nall others are left unmodified. \n\nKotlin \n\n```kotlin\n// Create a storage reference from our app\nval storageRef = storage.reference\n\n// Get reference to the file\nval forestRef = storageRef.child(\"images/forest.jpg\")\n``` \n\n```kotlin\n// Create file metadata including the content type\nval metadata = storageMetadata {\n contentType = \"image/jpg\"\n setCustomMetadata(\"myCustomProperty\", \"myValue\")\n}\n\n// Update metadata properties\nforestRef.updateMetadata(metadata).addOnSuccessListener { updatedMetadata -\u003e\n // Updated metadata is in updatedMetadata\n}.addOnFailureListener {\n // Uh-oh, an error occurred!\n}https://github.com/firebase/snippets-android/blob/b694d4dbd411d31be39655f47691c3e9f3529b03/storage/app/src/main/java/com/google/firebase/referencecode/storage/kotlin/StorageActivity.kt#L353-L364\n```\n\nJava \n\n```java\n// Create a storage reference from our app\nStorageReference storageRef = storage.getReference();\n\n// Get reference to the file\nStorageReference forestRef = storageRef.child(\"images/forest.jpg\");\n``` \n\n```java\n// Create file metadata including the content type\nStorageMetadata metadata = new StorageMetadata.Builder()\n .setContentType(\"image/jpg\")\n .setCustomMetadata(\"myCustomProperty\", \"myValue\")\n .build();\n\n// Update metadata properties\nforestRef.updateMetadata(metadata)\n .addOnSuccessListener(new OnSuccessListener\u003cStorageMetadata\u003e() {\n @Override\n public void onSuccess(StorageMetadata storageMetadata) {\n // Updated metadata is in storageMetadata\n }\n })\n .addOnFailureListener(new OnFailureListener() {\n @Override\n public void onFailure(@NonNull Exception exception) {\n // Uh-oh, an error occurred!\n }\n });https://github.com/firebase/snippets-android/blob/b694d4dbd411d31be39655f47691c3e9f3529b03/storage/app/src/main/java/com/google/firebase/referencecode/storage/StorageActivity.java#L451-L470\n```\n\nYou can delete writable metadata properties by passing `null`: \n\nKotlin \n\n```kotlin\n// Create file metadata with property to delete\nval metadata = storageMetadata {\n contentType = null\n}\n\n// Delete the metadata property\nforestRef.updateMetadata(metadata).addOnSuccessListener { updatedMetadata -\u003e\n // updatedMetadata.contentType should be null\n}.addOnFailureListener {\n // Uh-oh, an error occurred!\n}https://github.com/firebase/snippets-android/blob/b694d4dbd411d31be39655f47691c3e9f3529b03/storage/app/src/main/java/com/google/firebase/referencecode/storage/kotlin/StorageActivity.kt#L374-L384\n```\n\nJava \n\n```java\n// Create file metadata with property to delete\nStorageMetadata metadata = new StorageMetadata.Builder()\n .setContentType(null)\n .build();\n\n// Delete the metadata property\nforestRef.updateMetadata(metadata)\n .addOnSuccessListener(new OnSuccessListener\u003cStorageMetadata\u003e() {\n @Override\n public void onSuccess(StorageMetadata storageMetadata) {\n // metadata.contentType should be null\n }\n })\n .addOnFailureListener(new OnFailureListener() {\n @Override\n public void onFailure(@NonNull Exception exception) {\n // Uh-oh, an error occurred!\n }\n });https://github.com/firebase/snippets-android/blob/b694d4dbd411d31be39655f47691c3e9f3529b03/storage/app/src/main/java/com/google/firebase/referencecode/storage/StorageActivity.java#L480-L498\n```\n\nHandle Errors\n\nThere are a number of reasons why errors may occur on getting or updating\nmetadata, including the file not existing, or the user not having permission\nto access the desired file. More information on errors can be found in the\n[Handle Errors](/docs/storage/android/handle-errors)\nsection of the docs.\n\nCustom Metadata\n\nYou can specify custom metadata using the `setCustomMetadata()` method in the\n`StorageMetadata.Builder` class. \n\nKotlin \n\n```kotlin\nval metadata = storageMetadata {\n setCustomMetadata(\"location\", \"Yosemite, CA, USA\")\n setCustomMetadata(\"activity\", \"Hiking\")\n}https://github.com/firebase/snippets-android/blob/b694d4dbd411d31be39655f47691c3e9f3529b03/storage/app/src/main/java/com/google/firebase/referencecode/storage/kotlin/StorageActivity.kt#L390-L393\n```\n\nJava \n\n```java\nStorageMetadata metadata = new StorageMetadata.Builder()\n .setCustomMetadata(\"location\", \"Yosemite, CA, USA\")\n .setCustomMetadata(\"activity\", \"Hiking\")\n .build();https://github.com/firebase/snippets-android/blob/b694d4dbd411d31be39655f47691c3e9f3529b03/storage/app/src/main/java/com/google/firebase/referencecode/storage/StorageActivity.java#L504-L507\n```\n\nYou can store app-specific data for each file in custom metadata, but we highly\nrecommend using a database (such as the\n[Firebase Realtime Database](/docs/database/android/start))\nto store and synchronize this type of data.\n\nFile Metadata Properties\n\nA full list of metadata properties on a file is available below:\n\n| Property Getter | Type | Setter Exists |\n|-------------------------|---------------|---------------|\n| `getBucket` | `String` | NO |\n| `getGeneration` | `String` | NO |\n| `getMetadataGeneration` | `String` | NO |\n| `getPath` | `String` | NO |\n| `getName` | `String` | NO |\n| `getSizeBytes` | `long` | NO |\n| `getCreationTimeMillis` | `long` | NO |\n| `getUpdatedTimeMillis` | `long` | NO |\n| `getMd5Hash` | `String` | NO |\n| `getCacheControl` | `String` | YES |\n| `getContentDisposition` | `String` | YES |\n| `getContentEncoding` | `String` | YES |\n| `getContentLanguage` | `String` | YES |\n| `getContentType` | `String` | YES |\n| `getCustomMetadata` | `String` | YES |\n| `getCustomMetadataKeys` | `Set\u003cString\u003e` | NO |\n\nUploading, downloading, and updating files is important, but so is being able\nto remove them. Let's learn how to\n[delete files](/docs/storage/android/delete-files)\nfrom Cloud Storage."]]